@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,902 @@
1
+ import ts from 'typescript';
2
+ import { operationId, operationOfResult } from '../../../identity/ids.js';
3
+ import { normalCompletion, pureEffects, throwingCompletion } from '../../model/operands.js';
4
+ import { isParameterProperty } from '../census.js';
5
+ import { parameterBindingResultOf } from './bindings.js';
6
+ import { parameterSlotTypeOf } from '../parameter-slot.js';
7
+ import { mintOperationId, mintResult, operand } from './mint.js';
8
+ import { resultOf } from '../../model/operands.js';
9
+ import { asBlocked, resultEdge, uniqueSymbolKeyTextOf, staticFunctionNameOf, staticClassNameOf, staticClassLengthOf, expectedParameterCountOf, ownPrototypePropertyOf } from './shared.js';
10
+ import { citeExpressionResult } from './references.js';
11
+ import { physicalInitializerTypeOf } from '../structural-declarations.js';
12
+ import { transparentConstClassAliasTarget } from '../../class-alias.js';
13
+ import { inheritedAccessorOfAssignment } from '../../inherited-accessor.js';
14
+ const isStaticMember = (node) => ts.canHaveModifiers(node) && (ts.getModifiers(node) ?? []).some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword);
15
+ /**
16
+ * Whether `node`'s heritage clause is present, and therefore whether
17
+ * `bind-class-value` is this class's first or second minted operation.
18
+ *
19
+ * Member producers below need to reference the class's own `bind-class-value`
20
+ * id from a *different* census candidate than the one that minted it (the class
21
+ * declaration and its members are separate candidates). Recomputing the
22
+ * identity-ordinal from this same rule -- rather than threading the id through
23
+ * shared state -- keeps the two sides of that reference from drifting apart.
24
+ * This is `context.ordinals`' per-(node,family) mint count, unrelated to the
25
+ * `evaluationOrdinal` data field, which comes from `context.evaluationOrdinals`.
26
+ */
27
+ const hasExtendsClause = (classNode) => (classNode.heritageClauses ?? []).some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword);
28
+ const bindClassValueOperationId = (identities, classNode) => operationId(identities.nodeIdOf(classNode), 'class-lifecycle', hasExtendsClause(classNode) ? 1 : 0);
29
+ /** The class whose body lexically contains `node`, stopping before an outer class can claim a nested one's member. */
30
+ const containingClassOf = (node) => {
31
+ for (let current = node.parent; current; current = current.parent) {
32
+ if (ts.isClassLike(current))
33
+ return current;
34
+ }
35
+ return null;
36
+ };
37
+ /**
38
+ * The `this.key` access ONE JavaScript class member's own value declaration
39
+ * names -- for both spellings TypeScript's JS class inference accepts.
40
+ *
41
+ * `this.key = value` declares through the assignment. A JSDoc-typed statement
42
+ * `/** @type {T} *\/ this.key;` declares through the access alone: the checker
43
+ * publishes one property symbol either way, the second carrying the type the
44
+ * program STATED rather than one inferred from a store, and its value
45
+ * declaration is the bare access rather than a `BinaryExpression`. Reading
46
+ * only the assignment spelling left the second one's member fully typed at
47
+ * every read while the class layout had no `define-field` event for it --
48
+ * exactly the "typed but no storage event" hole this census exists to close,
49
+ * one spelling further along, and the reason a descriptor-defined field's
50
+ * definition could not tell whether it was CREATING the property or
51
+ * redefining one that already existed.
52
+ *
53
+ * The declaration-only spelling installs no property of its own: the statement
54
+ * is a read. It is admitted only as a statement of its own, never as a larger
55
+ * expression's operand, which would be an ordinary read.
56
+ */
57
+ const declaredThisAccessOf = (declaration) => {
58
+ const access = ts.isBinaryExpression(declaration)
59
+ ? declaration.operatorToken.kind === ts.SyntaxKind.EqualsToken
60
+ ? declaration.left
61
+ : null
62
+ : ts.isExpressionStatement(declaration.parent)
63
+ ? declaration
64
+ : null;
65
+ if (access === null)
66
+ return null;
67
+ if (!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access))
68
+ return null;
69
+ return access.expression.kind === ts.SyntaxKind.ThisKeyword ? access : null;
70
+ };
71
+ /**
72
+ * A JavaScript class field TypeScript inferred from a `this.key` declaration.
73
+ *
74
+ * JavaScript has no `PropertyDeclaration` node for this idiom. The checker does
75
+ * still publish one property symbol for it, whose declarations are the assignment
76
+ * expressions themselves, and `field-bindings.ts` already uses that same fact to
77
+ * derive the slot's type. Class projection used to read only explicit declaration
78
+ * events, so a field could be fully typed at every access while the C++ struct had
79
+ * no storage for it. The symbol's value declaration identifies the class that owns
80
+ * the slot; later writes in subclasses or methods must not redeclare it there.
81
+ */
82
+ const inferredJavaScriptFieldsOf = (checker, classNode) => {
83
+ const instance = checker.getTypeAtLocation(classNode);
84
+ const fields = [];
85
+ for (const symbol of checker.getPropertiesOfType(instance)) {
86
+ if (inheritedAccessorOfAssignment(checker, symbol))
87
+ continue;
88
+ const declaration = symbol.valueDeclaration;
89
+ if (!declaration)
90
+ continue;
91
+ const access = declaredThisAccessOf(declaration);
92
+ if (access === null)
93
+ continue;
94
+ if (containingClassOf(declaration) !== classNode)
95
+ continue;
96
+ const name = ts.isPropertyAccessExpression(access)
97
+ ? access.name.text
98
+ : ts.isStringLiteralLike(access.argumentExpression)
99
+ ? access.argumentExpression.text
100
+ : null;
101
+ if (name !== null)
102
+ fields.push({ name, declaration, access });
103
+ }
104
+ return fields;
105
+ };
106
+ export const createClassLifecycleProducer = (context) => {
107
+ const voidType = context.table.intern({ kind: 'primitive', primitive: 'void' });
108
+ const buildOperation = (id, caller, evaluationOrdinal, event, declaration, classDeclaration, descriptor, placement, operands, completion, effects) => ({
109
+ id,
110
+ caller,
111
+ operands,
112
+ results: [mintResult(id, 'completion', voidType)],
113
+ completion,
114
+ effects,
115
+ evaluationOrdinal,
116
+ family: 'class-lifecycle',
117
+ event,
118
+ declaration,
119
+ classDeclaration,
120
+ descriptor,
121
+ placement
122
+ });
123
+ const staticKeyType = context.table.intern({ kind: 'primitive', primitive: 'string' });
124
+ /**
125
+ * A member's key operand.
126
+ *
127
+ * A written name is a constant, exactly as a property access carries one --
128
+ * the key is part of the definition, and leaving it out means every consumer
129
+ * has to recover which member was defined from the declaration node, which is
130
+ * the syntax walk this graph exists to replace. A computed name is cited from
131
+ * whichever family normalized the bracketed expression.
132
+ */
133
+ const keyOperand = (name) => {
134
+ if (ts.isComputedPropertyName(name)) {
135
+ // A `unique symbol` name declares a member with a compile-time identity
136
+ // -- `class C { [S]: T }` is as much a declared member as `class C { x: T
137
+ // }`, and `keyof C` includes it. Publishing it as a *constant* key is
138
+ // what puts it in the class layout at all: `projection/classes.ts`
139
+ // deliberately skips a `define-field` whose key is not constant, so
140
+ // before this the field was dropped from the struct and every
141
+ // `this[S]` read had no member to find. `properties.ts` resolves the
142
+ // read's key through the same `uniqueSymbolKeyTextOf`, so the two
143
+ // sides name one member.
144
+ const symbolKey = uniqueSymbolKeyTextOf(context, context.types.typeAt(name.expression));
145
+ if (symbolKey !== null) {
146
+ return { operands: [operand('key', 0, { kind: 'constant', text: symbolKey, literal: 'string' }, staticKeyType)] };
147
+ }
148
+ const cited = citeExpressionResult(name.expression, context);
149
+ if (cited.kind === 'unmodelled')
150
+ return { blocked: cited.reason };
151
+ return { operands: [operand('key', 0, cited.source, context.types.typeAt(name.expression))] };
152
+ }
153
+ if (ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name)) {
154
+ return { operands: [operand('key', 0, { kind: 'constant', text: name.text, literal: 'string' }, staticKeyType)] };
155
+ }
156
+ // `#x` is not a property key in the language's sense -- it resolves against
157
+ // the class's private scope and `[[DefineOwnProperty]]` never sees it --
158
+ // but it *is* a member of a fixed layout, and the layout is what this
159
+ // operand feeds. `projection/classes.ts` skips any `define-field` whose key
160
+ // is not constant, so publishing nothing here dropped the member's
161
+ // initializer while `representation/object-shape.ts` (which reads the
162
+ // checker's own member list, where a private name appears exactly like any
163
+ // other) had already given the struct a field for it: `#count = 5` emitted
164
+ // a struct member that was never written, and the value was silently the
165
+ // C++ zero rather than the initializer's.
166
+ //
167
+ // The key is the private name's own text, `#` included, which is precisely
168
+ // the spelling the checker reports for the member and therefore the
169
+ // spelling the layout already uses -- so the definition here and a
170
+ // `this.#count` read (`properties.ts`) name one member without either side
171
+ // inventing a mangling. `types.ts` escapes it into a legal C++ member name
172
+ // exactly as it escapes any other non-identifier key. Two classes each
173
+ // declaring `#x` do not collide: each has its own layout.
174
+ if (ts.isPrivateIdentifier(name)) {
175
+ return { operands: [operand('key', 0, { kind: 'constant', text: name.text, literal: 'string' }, staticKeyType)] };
176
+ }
177
+ return { operands: [] };
178
+ };
179
+ /**
180
+ * The function object a class evaluation step creates.
181
+ *
182
+ * `DefineMethod` performs `OrdinaryFunctionCreate` before it defines
183
+ * anything, and `ClassDefinitionEvaluation` creates the constructor function
184
+ * object before binding the class name -- so these really are allocations,
185
+ * and publishing them under the allocation family is what gives each body a
186
+ * calling convention. Without them a method is a body nobody allocated: the
187
+ * ABI projection finds no callable carrier and refuses the whole function.
188
+ *
189
+ * The census routes these nodes to `class-lifecycle` alone, so no other
190
+ * producer mints an allocation at this identity.
191
+ */
192
+ // A class method/accessor is the only shape `contributeMethod` ever passes
193
+ // as `callable` here (the class-constructor-object allocation passes
194
+ // `null`, and reads its own `[[Name]]`/`length` through the unrelated
195
+ // `CallableConstructorObject` carrier this producer does not touch), so a
196
+ // simple type guard is exhaustive rather than a partial one that silently
197
+ // drops a shape it should have named.
198
+ const isNamedCallableMember = (declaration) => ts.isMethodDeclaration(declaration) || ts.isGetAccessorDeclaration(declaration) || ts.isSetAccessorDeclaration(declaration);
199
+ const allocateFunctionObject = (candidate, node, allocated, callable) => {
200
+ const id = mintOperationId(context.ordinals, candidate.id, 'allocation');
201
+ const shape = context.types.valueTypeAt(node);
202
+ return {
203
+ id,
204
+ family: 'allocation',
205
+ allocated,
206
+ shape,
207
+ callable: callable ? context.identities.functionIdOf(callable) : null,
208
+ ...(callable
209
+ ? {
210
+ functionSource: callable.getText(),
211
+ generatorFunction: 'asteriskToken' in callable && callable.asteriskToken !== undefined,
212
+ ...(ownPrototypePropertyOf(callable) === null ? {} : { ownPrototypeProperty: ownPrototypePropertyOf(callable) === true }),
213
+ ...(isNamedCallableMember(callable)
214
+ ? { functionName: staticFunctionNameOf(callable), functionLength: expectedParameterCountOf(callable) }
215
+ : {})
216
+ }
217
+ : {}),
218
+ // A class's constructor object states the class it belongs to and its
219
+ // `[[Name]]`, the way a function allocation states `functionName` --
220
+ // `C.name` is read off this, and a memberless class expression has no
221
+ // other event to prove it was evaluated (`preflight/property-access.ts`).
222
+ ...(allocated === 'class-constructor-object' && ts.isClassLike(node)
223
+ ? {
224
+ classDeclaration: context.identities.declarationIdOf(node),
225
+ functionName: staticClassNameOf(node),
226
+ functionLength: staticClassLengthOf(node)
227
+ }
228
+ : {}),
229
+ caller: candidate.caller,
230
+ operands: [],
231
+ results: [mintResult(id, 'value', shape)],
232
+ completion: normalCompletion,
233
+ effects: { ...pureEffects, allocates: true },
234
+ evaluationOrdinal: candidate.evaluationOrdinal
235
+ };
236
+ };
237
+ /** The one constructor declaration that owns a body -- an overload set's implementation, never a bodiless overload. */
238
+ const writtenConstructorOf = (node) => node.members.find((member) => ts.isConstructorDeclaration(member) && member.body !== undefined);
239
+ /**
240
+ * The written constructor's callable allocation, shared by the declaration
241
+ * and expression forms of a class: `[[Construct]]` enters the same body
242
+ * either way, and an expression that published no convention for it was
243
+ * refused at ABI projection ("no function-object allocation published a
244
+ * callable carrier") the moment its constructor read `this`.
245
+ */
246
+ const writtenConstructorAllocationOf = (candidate, node) => {
247
+ // The written constructor's own body convention: the instance as receiver,
248
+ // the declared parameters, and no result. `[[Construct]]` returns the
249
+ // instance it was given, never the body's completion value, so a body
250
+ // compiled to return one would be returning something the language discards.
251
+ // An overloaded class carries several ConstructorDeclarations, but only
252
+ // the implementation owns an executable body and frame. Selecting the
253
+ // first declaration binds the callable allocation to a bodyless overload
254
+ // (`constructor();`) while every parameter/body operation is owned by the
255
+ // later implementation's FunctionId. The ABI projection then correctly
256
+ // finds no allocation for that real body. A class with no bodyful
257
+ // constructor has no constructor body to allocate here.
258
+ const written = writtenConstructorOf(node);
259
+ if (!written)
260
+ return null;
261
+ {
262
+ const shape = context.table.intern({
263
+ kind: 'signature',
264
+ call: [
265
+ {
266
+ parameters: written.parameters.map((parameter) => {
267
+ const flags = {
268
+ optional: parameter.questionToken !== undefined,
269
+ rest: parameter.dotDotDotToken !== undefined,
270
+ hasInitializer: parameter.initializer !== undefined
271
+ };
272
+ const type = context.types.typeAt(parameter);
273
+ // Widen the census-aware type itself. A defaulted parameter's
274
+ // physical slot always admits `undefined`, including when the
275
+ // census replaced the checker's initializer-derived `{}` with
276
+ // the record its call sites actually pass. Leaving that replaced
277
+ // type unwidened makes the constructor ABI require the record
278
+ // while `contributeDefaultedParameter` correctly reads an
279
+ // optional raw argument, so the body and its callable allocation
280
+ // publish different frames and ABI projection must refuse them.
281
+ return {
282
+ type,
283
+ slot: parameterSlotTypeOf((members) => context.table.intern({ kind: 'union', members }), context.types.typeOf(context.checker.getUndefinedType()), flags, type),
284
+ ...flags
285
+ };
286
+ }),
287
+ minimumArity: written.parameters.filter((parameter) => !parameter.questionToken && !parameter.initializer).length,
288
+ thisParameter: context.types.instanceTypeAt(node),
289
+ result: voidType
290
+ }
291
+ ],
292
+ construct: []
293
+ });
294
+ const id = mintOperationId(context.ordinals, candidate.id, 'allocation');
295
+ return {
296
+ id,
297
+ family: 'allocation',
298
+ allocated: 'function-object',
299
+ shape,
300
+ callable: context.identities.functionIdOf(written),
301
+ classConstructorBodyOf: context.identities.declarationIdOf(node),
302
+ functionSource: written.getText(),
303
+ generatorFunction: 'asteriskToken' in written && written.asteriskToken !== undefined,
304
+ ...(ownPrototypePropertyOf(written) === null ? {} : { ownPrototypeProperty: ownPrototypePropertyOf(written) === true }),
305
+ caller: candidate.caller,
306
+ operands: [],
307
+ results: [mintResult(id, 'value', shape)],
308
+ completion: normalCompletion,
309
+ effects: { ...pureEffects, allocates: true },
310
+ evaluationOrdinal: candidate.evaluationOrdinal
311
+ };
312
+ }
313
+ };
314
+ const contributeClass = (candidate, node) => {
315
+ const source = candidate.id;
316
+ const declaration = context.identities.declarationIdOf(node);
317
+ const operations = [];
318
+ const edges = [];
319
+ const heritageExpression = node.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types[0]?.expression;
320
+ let heritageOperation = null;
321
+ if (heritageExpression) {
322
+ const evaluatedHeritage = transparentConstClassAliasTarget(context.checker, heritageExpression) ?? heritageExpression;
323
+ let heritageSource = { kind: 'absent' };
324
+ if (!candidate.classLayoutOnly) {
325
+ const cited = citeExpressionResult(evaluatedHeritage, context);
326
+ if (cited.kind === 'unmodelled') {
327
+ return asBlocked(candidate.id, 'class-lifecycle', `class heritage expression ${cited.reason}`, null);
328
+ }
329
+ heritageSource = cited.source;
330
+ }
331
+ const id = mintOperationId(context.ordinals, source, 'class-lifecycle');
332
+ // `ClassHeritage : extends LeftHandSideExpression` throws a TypeError when
333
+ // the evaluated value is neither a constructor nor null.
334
+ heritageOperation = buildOperation(id, candidate.caller, context.evaluationOrdinals.next(candidate.caller), 'evaluate-heritage', declaration, declaration, null, null, [operand('heritage', 0, heritageSource, context.types.typeAt(evaluatedHeritage))], candidate.classLayoutOnly ? normalCompletion : throwingCompletion, candidate.classLayoutOnly
335
+ ? pureEffects
336
+ : { readsMutableState: true, writesMutableState: false, allocates: false, callsUserCode: false });
337
+ if (candidate.classLayoutOnly)
338
+ heritageOperation = { ...heritageOperation, classLayoutOnly: true };
339
+ operations.push(heritageOperation);
340
+ const heritageValueEdge = resultEdge(heritageSource, id, 'heritage', 0);
341
+ if (heritageValueEdge)
342
+ edges.push(heritageValueEdge);
343
+ }
344
+ // The class binding and its member definitions refer to the evaluated
345
+ // constructor object. The allocation below must precede this event, after
346
+ // heritage resolves, so a static initializer uses that same prototype
347
+ // owner rather than inventing a second constructor evaluation.
348
+ const bindId = mintOperationId(context.ordinals, source, 'class-lifecycle');
349
+ const bindOperation = {
350
+ ...buildOperation(bindId, candidate.caller, candidate.evaluationOrdinal, 'bind-class-value', declaration, declaration, null, null, candidate.classLayoutOnly ? [operand('instance-layout', 0, { kind: 'absent' }, context.types.instanceTypeAt(node))] : [], normalCompletion, candidate.classLayoutOnly
351
+ ? pureEffects
352
+ : {
353
+ readsMutableState: false,
354
+ writesMutableState: true,
355
+ allocates: true,
356
+ callsUserCode: false
357
+ }),
358
+ ...(candidate.classLayoutOnly ? { classLayoutOnly: true } : {})
359
+ };
360
+ operations.push(bindOperation);
361
+ if (heritageOperation)
362
+ edges.push({ kind: 'evaluation', from: heritageOperation.id, to: bindOperation.id });
363
+ // The constructor function object, and the binding the class name holds.
364
+ // `ClassDefinitionEvaluation` creates the one and initializes the other,
365
+ // and both have to be published: without the allocation `new C()` has no
366
+ // convention to construct through, and without the binding every `new C()`
367
+ // reads a cell nothing in the program ever introduced.
368
+ //
369
+ // The allocation names no callable. `[[Construct]]` and the constructor
370
+ // *body* are two conventions -- one takes the arguments and returns an
371
+ // instance, the other takes the instance and returns nothing -- and giving
372
+ // the body the construct signature would compile it to return a value it
373
+ // never produces.
374
+ const constructorObject = candidate.classLayoutOnly ? null : allocateFunctionObject(candidate, node, 'class-constructor-object', null);
375
+ if (constructorObject) {
376
+ operations.push(constructorObject);
377
+ if (heritageOperation)
378
+ edges.push({ kind: 'evaluation', from: heritageOperation.id, to: constructorObject.id });
379
+ edges.push({ kind: 'evaluation', from: constructorObject.id, to: bindOperation.id });
380
+ }
381
+ const classValue = constructorObject ? resultOf(constructorObject, 'value') : null;
382
+ if (classValue && constructorObject) {
383
+ const nameId = mintOperationId(context.ordinals, source, 'binding');
384
+ const nameBinding = {
385
+ id: nameId,
386
+ family: 'binding',
387
+ action: 'initialize',
388
+ declaration,
389
+ // A class binding is `const`-like inside its own body and let-like
390
+ // outside; the observable half is the dead zone before evaluation.
391
+ mutable: false,
392
+ temporalDeadZone: true,
393
+ caller: candidate.caller,
394
+ operands: [operand('initializer', 0, { kind: 'result', result: classValue.id }, constructorObject.shape)],
395
+ results: [mintResult(nameId, 'value', constructorObject.shape)],
396
+ completion: normalCompletion,
397
+ effects: { ...pureEffects, writesMutableState: true },
398
+ evaluationOrdinal: candidate.evaluationOrdinal
399
+ };
400
+ operations.push(nameBinding);
401
+ edges.push({ kind: 'value', result: classValue.id, to: nameId, role: 'initializer', ordinal: 0 });
402
+ }
403
+ const written = writtenConstructorOf(node);
404
+ const writtenConstructor = candidate.classLayoutOnly ? null : writtenConstructorAllocationOf(candidate, node);
405
+ if (writtenConstructor)
406
+ operations.push(writtenConstructor);
407
+ // A parameter property is two declarations written as one:
408
+ // `constructor(readonly name: string)` declares the formal AND an instance
409
+ // member the constructor assigns it into. This is the member half -- the
410
+ // same `define-field` an ordinary field declaration publishes, with no
411
+ // initializer operand, because the value does not come from an initializer
412
+ // at all. It comes from the argument, and the store that writes it is
413
+ // minted from the parameter's OWN candidate (`contributeParameterProperty`
414
+ // below), whose caller is the constructor rather than this class
415
+ // evaluation -- which is exactly where the language runs it.
416
+ //
417
+ // Published here rather than from that candidate because a `define-field`
418
+ // is class evaluation: it runs once, in the class's own caller, and
419
+ // `projection/classes.ts` reads it into the layout every construction and
420
+ // every `this.name` lookup consults.
421
+ for (const parameter of written?.parameters ?? []) {
422
+ if (!isParameterProperty(parameter))
423
+ continue;
424
+ if (!ts.isIdentifier(parameter.name)) {
425
+ return asBlocked(candidate.id, 'class-lifecycle', 'a parameter property named by a destructuring pattern declares no single member for the class layout to hold', 'P1');
426
+ }
427
+ const fieldId = mintOperationId(context.ordinals, source, 'class-lifecycle');
428
+ operations.push(buildOperation(fieldId, candidate.caller, context.evaluationOrdinals.next(candidate.caller), 'define-field', context.identities.declarationIdOf(parameter), declaration, { writable: true, enumerable: true, configurable: true }, 'own', [operand('key', 0, { kind: 'constant', text: parameter.name.text, literal: 'string' }, staticKeyType)], normalCompletion, { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: false }));
429
+ edges.push({ kind: 'evaluation', from: bindOperation.id, to: fieldId });
430
+ }
431
+ // `this.x = value` in a JavaScript class declares an instance member to
432
+ // TypeScript without creating a PropertyDeclaration in the AST. Publish
433
+ // the same layout event an explicit `x;` field would publish, but no field
434
+ // initializer: the ordinary property store in the constructor remains the
435
+ // one runtime initialization, so this event contributes storage only.
436
+ for (const field of inferredJavaScriptFieldsOf(context.checker, node)) {
437
+ const fieldId = mintOperationId(context.ordinals, source, 'class-lifecycle');
438
+ operations.push(buildOperation(fieldId, candidate.caller, context.evaluationOrdinals.next(candidate.caller), 'define-field', context.identities.declarationIdOf(field.declaration), declaration, { writable: true, enumerable: true, configurable: true }, 'own', [
439
+ operand('key', 0, { kind: 'constant', text: field.name, literal: 'string' }, staticKeyType),
440
+ operand('field-storage', 0, { kind: 'absent' }, context.types.typeAt(field.access))
441
+ ], normalCompletion, { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: false }));
442
+ edges.push({ kind: 'evaluation', from: bindOperation.id, to: fieldId });
443
+ }
444
+ return { kind: 'operations', operations, edges };
445
+ };
446
+ /**
447
+ * The `super(...)` a constructor runs, when it is a statement of its own body.
448
+ *
449
+ * Only a top-level one is answered. A parameter property's store has to run
450
+ * AFTER the base is initialized -- that is the order the language states, and
451
+ * it is the order in which a base constructor calling an overridden method
452
+ * sees the derived object -- and ordering it needs an operation to order it
453
+ * against. A `super()` nested inside an `if` is a different question: the
454
+ * store is unconditional and the call is not, so the precedence would reach
455
+ * across a branch. That shape is refused by name rather than ordered wrongly.
456
+ */
457
+ const topLevelSuperCallOf = (constructorNode) => {
458
+ for (const statement of constructorNode.body?.statements ?? []) {
459
+ if (!ts.isExpressionStatement(statement))
460
+ continue;
461
+ const call = statement.expression;
462
+ if (ts.isCallExpression(call) && call.expression.kind === ts.SyntaxKind.SuperKeyword)
463
+ return call;
464
+ }
465
+ return null;
466
+ };
467
+ /**
468
+ * `constructor(readonly name: string)`: the store, in the constructor.
469
+ *
470
+ * The member itself is declared by the `define-field` `contributeClass`
471
+ * publishes above. What is left is the assignment TypeScript writes at the
472
+ * top of the constructor body -- and it belongs to the constructor's own
473
+ * caller, which is why it is minted from this candidate: `callerOf` walks
474
+ * from the parameter's parent, and that parent is the constructor.
475
+ *
476
+ * The receiver is a `reference`/`this` of this producer's own, exactly the
477
+ * shape `references.ts` mints for a written `this` -- because every stage
478
+ * after normalization asks its questions of a published RESULT: the plan
479
+ * selects a carrier per result, and `preflight/carrier-kind.ts` reads the
480
+ * receiver's carrier off `plan.selected`. Citing the frame's
481
+ * `{kind: 'receiver'}` provenance directly instead was measured and does not
482
+ * work: it has no result, so the receiver's carrier reads as `constant` and
483
+ * the site asks for a `property-access:constant:set:false` recipe no target
484
+ * has.
485
+ *
486
+ * It is minted at the CONSTRUCTOR's node rather than the parameter's. At the
487
+ * parameter's it would take the `reference` ordinal `bindings.ts`'s
488
+ * `parameterValueResultOf` predicts for a DEFAULTED parameter, so
489
+ * `constructor(readonly n = 5)` would have its default guard testing this
490
+ * operation instead of the raw argument -- a silent miscompile resting on
491
+ * which producer happened to run first. Nothing else mints a `reference` at a
492
+ * `ConstructorDeclaration`, and each store cites the result it minted itself.
493
+ *
494
+ * The value is the parameter's BINDING, not its raw slot: a defaulted
495
+ * parameter property stores the default when the caller passed nothing.
496
+ */
497
+ const contributeParameterProperty = (candidate, node) => {
498
+ const constructorNode = node.parent;
499
+ if (!ts.isConstructorDeclaration(constructorNode) || !ts.isClassLike(constructorNode.parent)) {
500
+ return asBlocked(candidate.id, 'class-lifecycle', 'a parameter property outside a class constructor is not modelled', 'P1');
501
+ }
502
+ if (!ts.isIdentifier(node.name)) {
503
+ return asBlocked(candidate.id, 'class-lifecycle', 'a parameter property named by a destructuring pattern declares no single member to store into', 'P1');
504
+ }
505
+ const classNode = constructorNode.parent;
506
+ // The member half is published by `contributeClass`, and only a class
507
+ // DECLARATION reaches it -- a class expression's own evaluation is minted
508
+ // by the allocation family, which has no candidate for this parameter.
509
+ // Emitting the store without the `define-field` would write into a member
510
+ // the layout does not declare, so the whole parameter property is refused
511
+ // by name instead of half-modelled.
512
+ if (!ts.isClassDeclaration(classNode)) {
513
+ return asBlocked(candidate.id, 'class-lifecycle', 'a parameter property of a class EXPRESSION publishes no "define-field": only a class declaration mints one, and a ' +
514
+ 'store with no member declared is a write into a layout nothing states', 'P1');
515
+ }
516
+ const superCall = topLevelSuperCallOf(constructorNode);
517
+ if (hasExtendsClause(classNode) && superCall === null) {
518
+ return asBlocked(candidate.id, 'class-lifecycle', "a parameter property in a derived class whose `super(...)` is not a statement of the constructor's own body has " +
519
+ 'nothing unconditional to order its store after', 'P1');
520
+ }
521
+ const receiverType = context.types.instanceTypeAt(classNode);
522
+ const valueType = context.types.typeAt(node);
523
+ const bound = parameterBindingResultOf(node, context.identities);
524
+ const receiverId = mintOperationId(context.ordinals, context.identities.nodeIdOf(constructorNode), 'reference');
525
+ const receiverResult = mintResult(receiverId, 'value', receiverType);
526
+ const receiver = {
527
+ id: receiverId,
528
+ family: 'reference',
529
+ form: 'this',
530
+ strict: true,
531
+ unresolvableThrows: false,
532
+ hasNoCell: false,
533
+ caller: candidate.caller,
534
+ // Supplied by the frame the caller established, so it is recorded as
535
+ // provenance rather than as a runtime step -- the same operand
536
+ // `references.ts`'s `buildThisReference` gives a written `this`.
537
+ operands: [operand('receiver', 0, { kind: 'receiver' }, receiverType, { kind: 'provenance' })],
538
+ results: [receiverResult],
539
+ completion: normalCompletion,
540
+ effects: { ...pureEffects, readsMutableState: true },
541
+ evaluationOrdinal: candidate.evaluationOrdinal
542
+ };
543
+ const storeId = mintOperationId(context.ordinals, candidate.id, 'property');
544
+ const store = {
545
+ id: storeId,
546
+ family: 'property',
547
+ internalMethod: 'set',
548
+ strict: true,
549
+ keyIsComputed: false,
550
+ // `[[Set]]` consults whatever descriptor the definition installed; it
551
+ // states none of its own, exactly as every other store does.
552
+ descriptor: null,
553
+ caller: candidate.caller,
554
+ operands: [
555
+ operand('receiver', 0, { kind: 'result', result: receiverResult.id }, receiverType),
556
+ operand('key', 0, { kind: 'constant', text: node.name.text, literal: 'string' }, staticKeyType),
557
+ operand('value', 0, { kind: 'result', result: bound }, valueType)
558
+ ],
559
+ results: [mintResult(storeId, 'value', receiverType)],
560
+ completion: normalCompletion,
561
+ effects: { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: false },
562
+ evaluationOrdinal: candidate.evaluationOrdinal
563
+ };
564
+ const edges = [
565
+ { kind: 'value', result: receiverResult.id, to: storeId, role: 'receiver', ordinal: 0 },
566
+ { kind: 'value', result: bound, to: storeId, role: 'value', ordinal: 0 }
567
+ ];
568
+ // After EVERY parameter of this constructor is bound, not just this one.
569
+ // `FunctionDeclarationInstantiation` binds the whole parameter list --
570
+ // running each default initializer -- before the body's first statement,
571
+ // and these stores are body statements. Without this,
572
+ // `constructor(readonly a = f(), readonly b = g())` stored `a` between
573
+ // `f()` and `g()` instead of after both, which `g()` can observe.
574
+ for (const sibling of constructorNode.parameters) {
575
+ if (sibling === node || (ts.isIdentifier(sibling.name) && sibling.name.text === 'this'))
576
+ continue;
577
+ edges.push({ kind: 'evaluation', from: operationId(context.identities.nodeIdOf(sibling), 'binding', 0), to: storeId });
578
+ }
579
+ // And after the base is initialized: a base constructor that calls an
580
+ // overridden method must not see a member this class has already written.
581
+ if (superCall) {
582
+ edges.push({ kind: 'evaluation', from: operationId(context.identities.nodeIdOf(superCall), 'invocation', 0), to: storeId });
583
+ }
584
+ return { kind: 'operations', operations: [receiver, store], edges };
585
+ };
586
+ /** Shared prelude for a class-element candidate: locate it among its siblings. */
587
+ const memberContext = (candidate, node) => {
588
+ const classNode = node.parent;
589
+ if (!ts.isClassLike(classNode)) {
590
+ return asBlocked(candidate.id, 'class-lifecycle', 'class element with no class-like parent is not modelled', 'P6');
591
+ }
592
+ if (ts.isClassDeclaration(classNode))
593
+ return { classNode, ready: bindClassValueOperationId(context.identities, classNode) };
594
+ const constructor = citeExpressionResult(classNode, context);
595
+ if (constructor.kind === 'unmodelled' || constructor.source.kind !== 'result') {
596
+ return asBlocked(candidate.id, 'class-lifecycle', 'class member definition has no evaluated constructor object', 'P6');
597
+ }
598
+ return { classNode, ready: operationOfResult(constructor.source.result) };
599
+ };
600
+ const contributeMethodOrAccessor = (candidate, node) => {
601
+ const located = memberContext(candidate, node);
602
+ if ('kind' in located)
603
+ return located;
604
+ const { classNode, ready } = located;
605
+ const resolvedKey = keyOperand(node.name);
606
+ if ('blocked' in resolvedKey) {
607
+ return asBlocked(candidate.id, 'class-lifecycle', `computed method/accessor name ${resolvedKey.blocked}`, 'P1');
608
+ }
609
+ const keyOperands = resolvedKey.operands;
610
+ const keySource = ts.isComputedPropertyName(node.name) ? (keyOperands[0]?.source ?? null) : null;
611
+ const source = candidate.id;
612
+ const declaration = context.identities.declarationIdOf(node);
613
+ const classId = context.identities.declarationIdOf(classNode);
614
+ const isPrivate = ts.isPrivateIdentifier(node.name);
615
+ const placement = isStaticMember(node) ? 'static' : 'prototype';
616
+ const event = ts.isMethodDeclaration(node) ? 'define-method' : ts.isGetAccessorDeclaration(node) ? 'define-getter' : 'define-setter';
617
+ // Private methods/accessors become PrivateElement records, not ordinary
618
+ // properties: no [[DefineOwnProperty]] happens, so there is no descriptor.
619
+ // An accessor descriptor has no [[Writable]] slot at all; `false` is the
620
+ // closest the fixed `PropertyDescriptorShape` (data-descriptor shaped) can
621
+ // state, since it cannot distinguish get/set descriptors from data ones.
622
+ const descriptor = isPrivate
623
+ ? null
624
+ : { writable: event === 'define-method', enumerable: false, configurable: true };
625
+ const operations = [];
626
+ const edges = [];
627
+ // `DefineMethod` creates the function object first; the definition that
628
+ // follows installs it. Two operations, because they are two steps, and
629
+ // because only the first states the convention the body is compiled to.
630
+ // An `abstract` member has no body, so there is no function object to
631
+ // create: what it publishes is the DECLARATION alone -- the key this class
632
+ // states and every concrete subclass must fill. `projection/classes.ts`
633
+ // already models a method whose callable is absent, and the dispatch
634
+ // family reads exactly that to root itself on the abstract class.
635
+ const methodObject = node.body === undefined ? null : allocateFunctionObject(candidate, node, 'function-object', node);
636
+ if (methodObject)
637
+ operations.push(methodObject);
638
+ const methodValue = methodObject ? resultOf(methodObject, 'value') : null;
639
+ const methodStorage = ts.isMethodDeclaration(node) && placement === 'prototype' ? context.types.mutableMethodStorageTypeAt(node) : null;
640
+ const methodOperands = methodValue && methodObject
641
+ ? [
642
+ ...keyOperands,
643
+ operand('method', 0, { kind: 'result', result: methodValue.id }, methodObject.shape),
644
+ ...(methodStorage === null ? [] : [operand('method-storage', 0, { kind: 'absent' }, methodStorage)])
645
+ ]
646
+ : [...keyOperands, ...(methodStorage === null ? [] : [operand('method-storage', 0, { kind: 'absent' }, methodStorage)])];
647
+ const defineId = mintOperationId(context.ordinals, source, 'class-lifecycle');
648
+ const defineOperation = buildOperation(defineId, candidate.caller, candidate.evaluationOrdinal, event, declaration, classId, descriptor, placement, methodOperands, normalCompletion, {
649
+ readsMutableState: false,
650
+ writesMutableState: true,
651
+ allocates: true,
652
+ callsUserCode: false
653
+ });
654
+ operations.push(defineOperation);
655
+ if (methodValue)
656
+ edges.push({ kind: 'value', result: methodValue.id, to: defineId, role: 'method', ordinal: 0 });
657
+ if (keySource) {
658
+ const keyEdge = resultEdge(keySource, defineId, 'key', 0);
659
+ if (keyEdge)
660
+ edges.push(keyEdge);
661
+ }
662
+ edges.push({ kind: 'evaluation', from: ready, to: defineOperation.id });
663
+ if (isPrivate) {
664
+ const brandId = mintOperationId(context.ordinals, source, 'class-lifecycle');
665
+ const brandOperation = buildOperation(brandId, candidate.caller, candidate.evaluationOrdinal, 'install-private-brand', declaration, classId, null, null, [], normalCompletion, {
666
+ readsMutableState: false,
667
+ writesMutableState: true,
668
+ allocates: false,
669
+ callsUserCode: false
670
+ });
671
+ operations.push(brandOperation);
672
+ edges.push({ kind: 'evaluation', from: defineOperation.id, to: brandOperation.id });
673
+ }
674
+ return { kind: 'operations', operations, edges };
675
+ };
676
+ const contributeField = (candidate, node) => {
677
+ const located = memberContext(candidate, node);
678
+ if ('kind' in located)
679
+ return located;
680
+ const { classNode, ready } = located;
681
+ const resolvedKey = keyOperand(node.name);
682
+ if ('blocked' in resolvedKey)
683
+ return asBlocked(candidate.id, 'class-lifecycle', `computed field name ${resolvedKey.blocked}`, 'P1');
684
+ const keyOperands = resolvedKey.operands;
685
+ const keySource = ts.isComputedPropertyName(node.name) ? (keyOperands[0]?.source ?? null) : null;
686
+ const source = candidate.id;
687
+ const declaration = context.identities.declarationIdOf(node);
688
+ const classId = context.identities.declarationIdOf(classNode);
689
+ const isPrivate = ts.isPrivateIdentifier(node.name);
690
+ const isStatic = isStaticMember(node);
691
+ // A field is installed via CreateDataPropertyOrThrow: writable, enumerable,
692
+ // and configurable are all true by construction (15.7.10/15.7.14), unlike a
693
+ // method's non-enumerable descriptor. A static field's placement is on the
694
+ // constructor object itself, never the prototype.
695
+ const descriptor = isPrivate ? null : { writable: true, enumerable: true, configurable: true };
696
+ const operations = [];
697
+ const edges = [];
698
+ // The initializer is a function: `ClassFieldDefinition` creates one and
699
+ // calls it once per construction with the instance as receiver. Allocating
700
+ // it here is what states that convention -- the body's own `this` reads the
701
+ // receiver this signature declares, and the construction site knows what to
702
+ // call. A field with no initializer creates none, which is why the operand
703
+ // is absent rather than a function that returns undefined.
704
+ let initializerObject = null;
705
+ // A field initialized with a GENERIC function literal the program never
706
+ // instantiates -- hono's `redirect = <T extends RedirectStatusCode = 302>(
707
+ // location, status?) => ...` in a program that never calls `c.redirect` --
708
+ // is a body `census.ts` walks not at all ("there is no such function in
709
+ // this program"), the same rule `declaration-lifecycle.ts`'s
710
+ // `namesUninstantiatedGeneric` applies to an import of one. Stating an
711
+ // initializer here anyway minted a thunk over an empty region: its return
712
+ // carried no value, the emitter spelled that as the `never` trap it is
713
+ // for a `return fail()`, and every `new Context(...)` threw before hono's
714
+ // handler ran. The field is recorded exactly as one declared with no
715
+ // initializer -- the only reads that could tell the difference are
716
+ // dynamic ones, and an uninstantiated generic has no value in this
717
+ // program for them to see either. A generic literal the program DOES
718
+ // call (`json: JSONRespond = <T, U>(...) => ...`) has copies, and keeps
719
+ // its initializer: `specialization.ts`'s `implementationOfCallee` is
720
+ // what gives it those copies through the field's declared signature.
721
+ const uninstantiatedGenericInitializer = node.initializer !== undefined &&
722
+ (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer)) &&
723
+ context.specializations.isGeneric(node.initializer) &&
724
+ context.specializations.specializationsOf(context.identities.genericSubjectOf(node.initializer)).length === 0;
725
+ if (node.initializer && !candidate.classLayoutOnly && !uninstantiatedGenericInitializer) {
726
+ // An instance field initializer runs with the new instance as `this`;
727
+ // a static field initializer runs during class evaluation with the
728
+ // constructor object as `this`. These are different physical carriers,
729
+ // so the initializer convention has to state the corresponding side of
730
+ // the class rather than giving both the instance-side type.
731
+ const receiver = isStatic ? context.types.valueTypeAt(classNode) : context.types.instanceTypeAt(classNode);
732
+ // What the thunk RETURNS is what the initializer evaluates to, and for a
733
+ // field annotated with an overload set and initialized with a function
734
+ // literal those are two different types -- the annotation has the
735
+ // overloads, the literal has the one convention it physically allocates.
736
+ // Asked at the initializer in exactly that case (`structural-parts.ts`'s
737
+ // `memberOf` asks the same question of the same helper, so the field's
738
+ // layout and its initializer's return cannot disagree), and at the
739
+ // declaration for every other field, whose annotation is its storage and
740
+ // is what the rest of the program already agreed on.
741
+ // STATED: the field's own written annotation, so `physicalInitializerTypeOf`
742
+ // can tell an authored overload set apart from the initializer's one real
743
+ // convention -- not a question a census answers, since the census's job
744
+ // is inferring an ABSENT annotation, and this only fires when one exists.
745
+ const physical = physicalInitializerTypeOf(context.checker, node, context.checker.getTypeAtLocation(node));
746
+ const result = context.types.typeAt(physical === null ? node : node.initializer);
747
+ const shape = context.table.intern({
748
+ kind: 'signature',
749
+ call: [{ parameters: [], minimumArity: 0, thisParameter: receiver, result }],
750
+ construct: []
751
+ });
752
+ const id = mintOperationId(context.ordinals, source, 'allocation');
753
+ initializerObject = {
754
+ id,
755
+ family: 'allocation',
756
+ allocated: 'function-object',
757
+ shape,
758
+ callable: context.identities.functionIdOf(node),
759
+ caller: candidate.caller,
760
+ operands: [],
761
+ results: [mintResult(id, 'value', shape)],
762
+ completion: normalCompletion,
763
+ effects: { ...pureEffects, allocates: true },
764
+ evaluationOrdinal: candidate.evaluationOrdinal
765
+ };
766
+ operations.push(initializerObject);
767
+ }
768
+ const initializerValue = initializerObject ? resultOf(initializerObject, 'value') : null;
769
+ // The field's declared storage type is needed even when it has no
770
+ // initializer (`static cacheHexString: boolean`). It is carried as an
771
+ // absent operand because class definition does not evaluate another value
772
+ // for it; the shape is metadata consumed by the class projection.
773
+ const storageOperand = operand('field-storage', 0, { kind: 'absent' }, context.types.typeAt(node));
774
+ const fieldOperands = initializerValue
775
+ ? [
776
+ ...keyOperands,
777
+ storageOperand,
778
+ operand('initializer', 0, { kind: 'result', result: initializerValue.id }, initializerObject?.shape ?? voidType)
779
+ ]
780
+ : [...keyOperands, storageOperand];
781
+ const defineId = mintOperationId(context.ordinals, source, 'class-lifecycle');
782
+ // Instance fields run their initializer at construction, after `super()`
783
+ // returns in a derived class -- this event records that the field exists
784
+ // and where it is installed. The initializer's own operations are attributed
785
+ // to the `field-initializer` region census already creates for this
786
+ // declaration, ordered against `super()` by whatever family models the
787
+ // constructor's invocation graph; this producer has no channel to that
788
+ // family's operation ids (see report on the `this`-not-bound-before-`super`
789
+ // requirement, which needs a binding event this event vocabulary lacks).
790
+ const defineOperation = {
791
+ ...buildOperation(defineId, candidate.caller, context.evaluationOrdinals.next(candidate.caller), 'define-field', declaration, classId, descriptor, isStatic ? 'static' : 'own', fieldOperands, normalCompletion, { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: false }),
792
+ ...(ts.getJSDocTags(node).some((tag) => tag.tagName.text === 'geaSubclassMemberOverlay')
793
+ ? { syntheticSubclassMemberOverlay: true }
794
+ : {})
795
+ };
796
+ operations.push(defineOperation);
797
+ if (initializerValue)
798
+ edges.push({ kind: 'value', result: initializerValue.id, to: defineId, role: 'initializer', ordinal: 0 });
799
+ if (keySource) {
800
+ const keyEdge = resultEdge(keySource, defineId, 'key', 0);
801
+ if (keyEdge)
802
+ edges.push(keyEdge);
803
+ }
804
+ edges.push({ kind: 'evaluation', from: ready, to: defineOperation.id });
805
+ if (isPrivate) {
806
+ const brandId = mintOperationId(context.ordinals, source, 'class-lifecycle');
807
+ const brandOperation = buildOperation(brandId, candidate.caller, candidate.evaluationOrdinal, 'install-private-brand', declaration, classId, null, null, [], normalCompletion, {
808
+ readsMutableState: false,
809
+ writesMutableState: true,
810
+ allocates: false,
811
+ callsUserCode: false
812
+ });
813
+ operations.push(brandOperation);
814
+ edges.push({ kind: 'evaluation', from: defineOperation.id, to: brandOperation.id });
815
+ }
816
+ return { kind: 'operations', operations, edges };
817
+ };
818
+ const contributeStaticBlock = (candidate, node) => {
819
+ const located = memberContext(candidate, node);
820
+ if ('kind' in located)
821
+ return located;
822
+ const { classNode, ready } = located;
823
+ const source = candidate.id;
824
+ const declaration = context.identities.declarationIdOf(node);
825
+ const classId = context.identities.declarationIdOf(classNode);
826
+ const id = mintOperationId(context.ordinals, source, 'class-lifecycle');
827
+ const operation = buildOperation(id, candidate.caller, context.evaluationOrdinals.next(candidate.caller), 'run-static-block', declaration, classId, null, null, [],
828
+ // The block body can throw and can read/write arbitrary state; its own
829
+ // statements are separately normalized under the `static-block` region
830
+ // census already creates, so this operation is the block's entry point.
831
+ throwingCompletion, { readsMutableState: true, writesMutableState: true, allocates: false, callsUserCode: true });
832
+ const edges = [];
833
+ edges.push({ kind: 'evaluation', from: ready, to: operation.id });
834
+ return { kind: 'operations', operations: [operation], edges };
835
+ };
836
+ /**
837
+ * A class expression's `evaluate-heritage` event -- the one lifecycle step
838
+ * an expression shares with a declaration. Its constructor object is the
839
+ * allocation family's (`allocations.ts`), and it binds no name, so neither
840
+ * `bind-class-value` nor a name binding is minted here; `census.ts`'s
841
+ * `familiesOf` routes only an expression WITH an `extends` clause this way.
842
+ */
843
+ const contributeClassExpressionHeritage = (candidate, node) => {
844
+ const heritageExpression = node.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types[0]?.expression;
845
+ const writtenConstructor = writtenConstructorAllocationOf(candidate, node);
846
+ if (!heritageExpression)
847
+ return { kind: 'operations', operations: writtenConstructor ? [writtenConstructor] : [], edges: [] };
848
+ const declaration = context.identities.declarationIdOf(node);
849
+ const evaluatedHeritage = transparentConstClassAliasTarget(context.checker, heritageExpression) ?? heritageExpression;
850
+ const cited = citeExpressionResult(evaluatedHeritage, context);
851
+ if (cited.kind === 'unmodelled') {
852
+ return asBlocked(candidate.id, 'class-lifecycle', `class heritage expression ${cited.reason}`, null);
853
+ }
854
+ const id = mintOperationId(context.ordinals, candidate.id, 'class-lifecycle');
855
+ const operation = buildOperation(id, candidate.caller, context.evaluationOrdinals.next(candidate.caller), 'evaluate-heritage', declaration, declaration, null, null, [operand('heritage', 0, cited.source, context.types.typeAt(evaluatedHeritage))], throwingCompletion, { readsMutableState: true, writesMutableState: false, allocates: false, callsUserCode: false });
856
+ const edge = resultEdge(cited.source, id, 'heritage', 0);
857
+ const constructor = citeExpressionResult(node, context);
858
+ if (constructor.kind === 'unmodelled' || constructor.source.kind !== 'result') {
859
+ return asBlocked(candidate.id, 'class-lifecycle', 'class heritage has no evaluated constructor object', 'P6');
860
+ }
861
+ return {
862
+ kind: 'operations',
863
+ operations: writtenConstructor ? [writtenConstructor, operation] : [operation],
864
+ edges: [...(edge ? [edge] : []), { kind: 'evaluation', from: id, to: operationOfResult(constructor.source.result) }]
865
+ };
866
+ };
867
+ const contribute = (candidate) => {
868
+ const { node } = candidate;
869
+ if (ts.isClassDeclaration(node))
870
+ return contributeClass(candidate, node);
871
+ if (ts.isClassExpression(node))
872
+ return contributeClassExpressionHeritage(candidate, node);
873
+ if (ts.isMethodDeclaration(node) || ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node)) {
874
+ return contributeMethodOrAccessor(candidate, node);
875
+ }
876
+ if (ts.isPropertyDeclaration(node))
877
+ return contributeField(candidate, node);
878
+ if (ts.isClassStaticBlockDeclaration(node))
879
+ return contributeStaticBlock(candidate, node);
880
+ if (ts.isParameter(node))
881
+ return contributeParameterProperty(candidate, node);
882
+ // A written constructor has no lifecycle event of its own: unlike a method
883
+ // or accessor, it is never installed onto a prototype, and unlike a field
884
+ // it is never run as a per-instance initializer step -- `[[Construct]]`
885
+ // calls it directly as the class's own body. Its allocation (the callable
886
+ // convention `functionIdOf(written)` gives the body) and its binding into
887
+ // the class's own name are both already published by `contributeClass`
888
+ // above, from the *class declaration's* candidate, because both need
889
+ // `written` before this per-member candidate for the constructor node
890
+ // itself is even visited. Its parameters are ordinary `binding`-family
891
+ // candidates (bodied since `bindings.ts`'s `hasArgumentFrame` recognizes
892
+ // `ConstructorDeclaration`) and its statements are their own families
893
+ // under its own `FunctionId` as caller -- neither runs through this
894
+ // family at all. So this candidate genuinely has nothing left to
895
+ // introduce, the same "nothing at this coordinate" answer a
896
+ // pattern-nested `BindingElement` gives in `bindings.ts`.
897
+ if (ts.isConstructorDeclaration(node))
898
+ return { kind: 'operations', operations: [], edges: [] };
899
+ return asBlocked(candidate.id, 'class-lifecycle', 'census produced a class-lifecycle candidate of an unmodelled node kind', null);
900
+ };
901
+ return { family: 'class-lifecycle', contribute };
902
+ };