@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,710 @@
1
+ import { enclosingArgumentsFunction, implicitArgumentsSlotOf, isBodiedSignatureDeclaration } from '../implicit-arguments.js';
2
+ export { argumentsObjectPhantomOrdinalAt, isArgumentsObjectIdentifier } from '../implicit-arguments.js';
3
+ import ts from 'typescript';
4
+ import { operationId, regionId, semanticResultId } from '../../../identity/ids.js';
5
+ import { normalCompletion, pureEffects } from '../../model/operands.js';
6
+ import { blocked, mintOperationId, mintResult, operand } from './mint.js';
7
+ import { bindingKindOf, bindingKindOfElement } from './binding-kind.js';
8
+ import { boundElementType, citeBoundElementValue } from './destructuring.js';
9
+ import { citeExpressionResult } from './references.js';
10
+ import { resultEdge } from './shared.js';
11
+ /**
12
+ * The binding a destructuring element introduces.
13
+ *
14
+ * Extraction and introduction are two operations, not one: the destructuring
15
+ * family answers "which value does this position yield", and this family
16
+ * answers "which name now holds it, with what mutability and dead zone". Fusing
17
+ * them would put one question under two authorities, and the two answers would
18
+ * eventually disagree.
19
+ *
20
+ * An element whose own name is a nested pattern binds nothing here -- the
21
+ * nested pattern's elements are the declarations, and each is its own candidate
22
+ * -- so this contributes an empty, fully covered publication rather than a
23
+ * blocker: nothing is missing, there is simply nothing at this coordinate.
24
+ */
25
+ const contributeBindingElement = (candidate, node, context) => {
26
+ if (!ts.isIdentifier(node.name))
27
+ return { kind: 'operations', operations: [], edges: [] };
28
+ const { mutable, temporalDeadZone } = bindingKindOfElement(node);
29
+ const extracted = citeBoundElementValue(node, context.identities);
30
+ const type = boundElementType(node, context);
31
+ const id = mintOperationId(context.ordinals, candidate.id, 'binding');
32
+ const declaration = context.identities.declarationIdOf(node);
33
+ const operation = {
34
+ id,
35
+ family: 'binding',
36
+ action: 'initialize',
37
+ declaration,
38
+ mutable,
39
+ temporalDeadZone,
40
+ ...(context.commonJsBindings.has(declaration)
41
+ ? {
42
+ commonJs: {
43
+ global: context.commonJsBindings.get(declaration),
44
+ owner: regionId(context.identities.nodeIdOf(node.getSourceFile()), 'module-body')
45
+ }
46
+ }
47
+ : {}),
48
+ ...(isParameterBindingElement(node) ? { parameterInitialization: true } : {}),
49
+ caller: candidate.caller,
50
+ operands: [operand('initializer', 0, extracted, type)],
51
+ results: [mintResult(id, 'value', type)],
52
+ completion: normalCompletion,
53
+ effects: { ...pureEffects, writesMutableState: true },
54
+ evaluationOrdinal: candidate.evaluationOrdinal
55
+ };
56
+ const edges = extracted.kind === 'result' ? [{ kind: 'value', result: extracted.result, to: id, role: 'initializer', ordinal: 0 }] : [];
57
+ return { kind: 'operations', operations: [operation], edges };
58
+ };
59
+ /** Whether a nested binding element ultimately belongs to a formal parameter pattern. */
60
+ const isParameterBindingElement = (node) => {
61
+ for (let current = node.parent; current; current = current.parent) {
62
+ if (ts.isParameter(current))
63
+ return true;
64
+ if (ts.isVariableDeclaration(current))
65
+ return false;
66
+ if (!ts.isBindingElement(current) && !ts.isArrayBindingPattern(current) && !ts.isObjectBindingPattern(current))
67
+ return false;
68
+ }
69
+ return false;
70
+ };
71
+ /**
72
+ * The identity a defaulted parameter's raw argument value publishes under.
73
+ *
74
+ * A default initializer runs only when the caller's own value is exactly
75
+ * `undefined`, which is a presence test over the raw, pre-default argument --
76
+ * not over the named binding a program reads afterward, which by then always
77
+ * excludes `undefined` (ECMA-262 9.2.10). Something has to be citable *as*
78
+ * that raw value for a guard to test it, and `semantics/normalize/gating.ts`
79
+ * has to name the exact same result `contributeDefaultedParameter` mints,
80
+ * independently and in advance -- the same way every other cross-producer
81
+ * citation in this compiler agrees on an identity rather than looking one up.
82
+ */
83
+ export const parameterValueResultOf = (node, identities) => semanticResultId(operationId(identities.nodeIdOf(node), 'reference', 0), 'value');
84
+ /**
85
+ * The identity a formal parameter's own binding publishes its value under.
86
+ *
87
+ * The value AFTER `FunctionDeclarationInstantiation` has run -- so the default
88
+ * applied where there is one, and the raw argument where there is not. Both
89
+ * shapes below mint that binding as the first `binding`-family operation at
90
+ * the parameter's node, which is what makes one rule serve both.
91
+ *
92
+ * Cited by `producers/class-lifecycle.ts`, which needs it for the store half
93
+ * of a parameter property: `constructor(readonly name: T)` assigns the value
94
+ * the parameter is BOUND to, not the raw slot -- `constructor(readonly n = 5)`
95
+ * stores 5 when the caller passed nothing.
96
+ */
97
+ export const parameterBindingResultOf = (node, identities) => semanticResultId(operationId(identities.nodeIdOf(node), 'binding', 0), 'value');
98
+ /**
99
+ * The physical position a formal parameter occupies in its callable's frame.
100
+ *
101
+ * A `this` parameter is a type annotation with no argument slot behind it, so
102
+ * it is not counted; every parameter after one would otherwise be off by one
103
+ * against the ABI the signature shape describes.
104
+ */
105
+ const abiOrdinalOf = (node) => {
106
+ const parameters = node.parent.parameters;
107
+ const physical = parameters.filter((parameter) => !(ts.isIdentifier(parameter.name) && parameter.name.text === 'this'));
108
+ return physical.indexOf(node);
109
+ };
110
+ /**
111
+ * The full logical `arguments` value at one reference site.
112
+ *
113
+ * `arguments[i]` is unmapped in every ES module (ES modules are always strict
114
+ * mode, and strict-mode `arguments` never aliases a named parameter's later
115
+ * reassignment -- ECMA-262 `MakeArgGetter`/`MakeArgSetter` bindings are
116
+ * SLOPPY-mode only), so every position reads the RAW value the caller passed,
117
+ * not whatever the named binding holds now. That raw value is available
118
+ * directly from the frame at `{kind:'parameter', ordinal}` for every
119
+ * position, the same source `contributeParameter`'s own binding reads.
120
+ *
121
+ * A `restFrom` REST PARAMETER (real or, through `implicitArgumentsSlotOf`, the checker's own phantom) is a DIFFERENT ECMAScript
122
+ * concept: it packs only the TAIL of the argument list, from its own ordinal
123
+ * onward, into a fresh array. `arguments`, by contrast, is EVERY argument, so
124
+ * where the phantom sits at ordinal `P > 0`, `arguments` is P declared
125
+ * parameters concatenated with that tail -- built as a range copy through the
126
+ * same array-literal-with-spread shape `allocations.ts`'s own producer
127
+ * builds for `[a, b, ...c]` (see `spread-arguments.ts`'s module comment: "the
128
+ * same `appendRange`... an array literal's own admitted spread emits"), never
129
+ * an alias of either source.
130
+ *
131
+ * `P === 0` (every forwarding shim this compiler has seen: `function
132
+ * texImage2D(){ gl.texImage2D(...arguments) }`) degenerates to exactly the
133
+ * phantom's own rest array -- no concatenation needed, so none is built.
134
+ *
135
+ * Every occurrence mints its own copy of these operations, the same way
136
+ * `buildThisReference` (`references.ts`) mints one operation per `this`
137
+ * keyword rather than sharing one across the function: cheap, and correct
138
+ * only because `arguments` is exclusively READ by every body this compiler
139
+ * normalizes -- an unmapped `arguments[i] = x` write would observably diverge
140
+ * from a second, independently-read copy, and is not admitted here.
141
+ *
142
+ * Returns `null` when `node` is not inside a function with this recognized
143
+ * phantom shape at all -- callers should treat that exactly as "this is not
144
+ * the magic `arguments` binding this compiler can bind," the same fail-closed
145
+ * answer `citeExpressionResult` gives any other unmodelled expression.
146
+ */
147
+ export const argumentsObjectValueAt = (node, mintAgainst, caller, evaluationOrdinal, context) => {
148
+ const fn = enclosingArgumentsFunction(node);
149
+ if (!fn)
150
+ return null;
151
+ const signature = context.checker.getSignatureFromDeclaration(fn);
152
+ const phantom = signature ? implicitArgumentsSlotOf(signature) : null;
153
+ if (!phantom)
154
+ return null;
155
+ // Read the same slot as the callable ABI. The signature mapper owns the
156
+ // census-to-structural translation, including the checker fallback when
157
+ // complete argument evidence is unavailable.
158
+ if (!signature)
159
+ return null;
160
+ const frame = context.table.get(context.types.resolvedSignatureTypeOf(signature, 'call')).shape;
161
+ const restType = frame.kind === 'signature' ? frame.call[0]?.parameters[phantom.ordinal]?.type : undefined;
162
+ if (restType === undefined)
163
+ return null;
164
+ const restId = mintOperationId(context.ordinals, mintAgainst, 'reference');
165
+ const restResult = mintResult(restId, 'value', restType);
166
+ // Same shape `contributeDefaultedParameter`'s raw-argument citation mints
167
+ // above, and for the identical reason: `projection/abi.ts`'s
168
+ // `parameterCarrierKeys` already recognizes `reference`/`parameter-value`
169
+ // as evidence ordinal `phantom.ordinal` is physically bound, so this needs
170
+ // no change there to satisfy the ABI projection's own arity check.
171
+ const restOperation = {
172
+ id: restId,
173
+ family: 'reference',
174
+ form: 'parameter-value',
175
+ strict: true,
176
+ unresolvableThrows: false,
177
+ hasNoCell: false,
178
+ caller,
179
+ operands: [operand('argument', 0, { kind: 'parameter', ordinal: phantom.ordinal }, restType, { kind: 'provenance' })],
180
+ results: [restResult],
181
+ completion: normalCompletion,
182
+ effects: pureEffects,
183
+ evaluationOrdinal
184
+ };
185
+ if (phantom.ordinal === 0)
186
+ return { operations: [restOperation], edges: [], value: restResult.id, type: restType };
187
+ const operands = [];
188
+ for (let i = 0; i < phantom.ordinal; i++) {
189
+ const declared = fn.parameters[i];
190
+ const elementType = declared ? context.types.typeAt(declared) : restType;
191
+ operands.push(operand('element', i, { kind: 'parameter', ordinal: i }, elementType));
192
+ }
193
+ operands.push(operand('spread', phantom.ordinal, { kind: 'result', result: restResult.id }, restType));
194
+ const arrayId = mintOperationId(context.ordinals, mintAgainst, 'allocation');
195
+ const arrayOperation = {
196
+ id: arrayId,
197
+ family: 'allocation',
198
+ caller,
199
+ allocated: 'array-literal',
200
+ callable: null,
201
+ // The census element covers the complete argument list, including the
202
+ // declared prefix, so the signature's array carrier also holds this copy.
203
+ shape: restType,
204
+ operands,
205
+ results: [mintResult(arrayId, 'value', restType)],
206
+ completion: normalCompletion,
207
+ effects: { readsMutableState: false, writesMutableState: false, allocates: true, callsUserCode: false },
208
+ evaluationOrdinal
209
+ };
210
+ return {
211
+ operations: [restOperation, arrayOperation],
212
+ edges: [{ kind: 'value', result: restResult.id, to: arrayId, role: 'spread', ordinal: phantom.ordinal }],
213
+ value: semanticResultId(arrayId, 'value'),
214
+ type: restType
215
+ };
216
+ };
217
+ /**
218
+ * Whether a parameter binds a cell in a real calling frame.
219
+ *
220
+ * A parameter's parent can be a type-level shape with no frame behind it at
221
+ * all -- `FunctionTypeNode`, `ConstructorTypeNode`, `MethodSignature`,
222
+ * `CallSignatureDeclaration`, `ConstructSignatureDeclaration`, and
223
+ * `IndexSignatureDeclaration` all declare a parameter list without ever
224
+ * calling it. Those parents are not in `BodiedSignatureDeclaration` at all, so
225
+ * they answer `false` here directly. An ambient declaration or an overload
226
+ * signature has a parent kind that *can* carry a body (`FunctionDeclaration`)
227
+ * but this particular one does not (`declare function f(x: number): void`, or
228
+ * one signature of an overloaded function with no implementation) -- checking
229
+ * `.body` catches those the kind test alone would miss. Every one of these
230
+ * shapes has no ABI a caller ever writes an argument into, so publishing an
231
+ * `initialize` operand sourced from an ABI position would mint a read of a
232
+ * frame slot nothing populates.
233
+ */
234
+ const hasArgumentFrame = (node) => {
235
+ const parent = node.parent;
236
+ return isBodiedSignatureDeclaration(parent) && parent.body !== undefined;
237
+ };
238
+ /**
239
+ * The structural type ECMAScript's default-parameter initializer eliminates:
240
+ * exactly the `undefined` arm of a union, never `null`. Only a union the
241
+ * checker widened with `undefined` needs the strip -- an inferred parameter
242
+ * (`p = 0`, no annotation) is never widened that way to begin with, and
243
+ * `checker.getNonNullableType` strips both absence values, which is the wrong
244
+ * rule here: `function f(x: number | null = 0)` still binds `x` to `null`
245
+ * when a caller passes it, and only an omitted or explicitly `undefined`
246
+ * argument runs the initializer.
247
+ *
248
+ * This filters the *structural* union rather than reconstructing a `ts.Type`.
249
+ * `ts.TypeChecker.getUnionType` is internal and not part of the public API,
250
+ * so a `ts.Type`-level strip has no way to spell "the union of the two
251
+ * declared members that are left" once `undefined` has more than one
252
+ * sibling -- `function f(x: string | number | undefined = 0)` would have had
253
+ * to fall back to the whole three-armed type, leaving `undefined` in the
254
+ * binding's cell despite the initializer having just eliminated it, which is
255
+ * exactly the `binding-read-conversion` mismatch this produced against every
256
+ * later read (each of which derives its own, `undefined`-free structural
257
+ * type independently). `StructuralTypeTable` has no such restriction: a
258
+ * structural `union` is public data this file already constructs directly
259
+ * two lines below, so dropping one member and re-interning -- or unwrapping
260
+ * to the sole remaining member -- needs nothing internal.
261
+ */
262
+ const withoutUndefinedMember = (id, table) => {
263
+ const type = table.get(id);
264
+ if (type.shape.kind !== 'union')
265
+ return id;
266
+ const remaining = type.shape.members.filter((memberId) => {
267
+ const member = table.get(memberId);
268
+ return member.shape.kind !== 'primitive' || member.shape.primitive !== 'undefined';
269
+ });
270
+ if (remaining.length === type.shape.members.length)
271
+ return id;
272
+ const [first, ...rest] = remaining;
273
+ if (!first)
274
+ return id;
275
+ return rest.length === 0 ? first : table.intern({ kind: 'union', members: remaining });
276
+ };
277
+ /** Whether a type IS `undefined`, or a union every member of which is -- the one initializer that replaces nothing. */
278
+ const isUndefinedType = (id, table) => {
279
+ const shape = table.get(id).shape;
280
+ if (shape.kind === 'primitive')
281
+ return shape.primitive === 'undefined';
282
+ return shape.kind === 'union' && shape.members.every((member) => isUndefinedType(member, table));
283
+ };
284
+ /**
285
+ * A defaulted parameter's three operations: the raw argument as a citable
286
+ * guard, the default itself, and the named binding.
287
+ *
288
+ * `function f(x = 0)` binds `x` inside the body via
289
+ * `FunctionDeclarationInstantiation` -> `IteratorBindingInitialization` ->
290
+ * `KeyedBindingInitialization`'s Initializer_opt clause -- the exact same
291
+ * production a destructuring element's own default already goes through,
292
+ * which is why this reuses that family's operation rather than inventing a
293
+ * second "default" shape: `family: 'destructuring', form: 'default-value'`
294
+ * (`contributeDefault` above -- sibling code, not this parameter's own -- for
295
+ * the object/array-pattern case) already models "fire only when the extracted
296
+ * value is exactly `undefined`" with its own identity rather than the shared
297
+ * conditional-edge vocabulary, for the reason given on that function: the
298
+ * vocabulary only has `nullish`, which conflates `null` with `undefined`.
299
+ *
300
+ * The raw argument's own structural type is built here rather than read off
301
+ * the parameter the way every other operand's type is, because the checker's
302
+ * answer for it is not one shape across the two ways to spell a default:
303
+ * `p: number | undefined = 0`'s parameter declaration reports the full
304
+ * annotation, `number | undefined`, but `p = 0`'s already reports the
305
+ * narrowed, `undefined`-free `number` there -- the same checker API
306
+ * disagreeing with itself across two spellings of one feature. Building
307
+ * `payload | undefined` directly, from the same payload type the default's
308
+ * own result publishes, is what makes this operand's carrier agree with
309
+ * `representation/derive.ts`'s `abiOf` regardless of which spelling produced
310
+ * it, since both widen the same payload with the same absence value; a
311
+ * parameter whose own declared type already carries a *different* absence
312
+ * value (`p: number | null = 0`) has that same union collapse fail closed in
313
+ * `abiOf`, for the reason given on the `optionalOf` call there.
314
+ */
315
+ const contributeDefaultedParameter = (candidate, node, context) => {
316
+ const cited = citeExpressionResult(node.initializer, context);
317
+ if (cited.kind === 'unmodelled') {
318
+ return { kind: 'blocked', blocker: blocked(candidate.id, 'binding', `default parameter initializer ${cited.reason}`, null) };
319
+ }
320
+ // `undefined` is stripped from the body type because the initializer runs
321
+ // exactly when the argument was `undefined` and replaces it -- unless the
322
+ // initializer's own value IS `undefined`, in which case it replaces nothing
323
+ // and the body really can observe one. `p: EventName | undefined = undefined`
324
+ // is that case, it is ordinary TypeScript (which types the binding
325
+ // `EventName | undefined` there, exactly as this now does), and stripping it
326
+ // anyway gave the initializer's own constant the undefined-free carrier --
327
+ // a literal `undefined` asserted into a `gea::TaggedUnion<std::string,
328
+ // gea::Symbol>`, which has no state for it.
329
+ // STATED, not held: this parameter's own written annotation, needed
330
+ // verbatim (see the comment above) precisely because the checker's answer
331
+ // to it differs across two annotation spellings -- the exact fact this
332
+ // code compensates for, not one a census should paper over.
333
+ // ...and asked of the CENSUS first, exactly as `structural-parts.ts`'s
334
+ // `parameterOf` opens with `parameters.typeAt(declaration)` for the SLOT
335
+ // this operand reads. The checker's answer at an UNANNOTATED defaulted
336
+ // parameter is not the written annotation the paragraph above is about --
337
+ // there is none -- it is the DEFAULT INITIALIZER'S own type, and a default
338
+ // value is not a type. `RenderTarget.js`'s `_setTextureOptions( options =
339
+ // {} )` is the measured case: the ABI slot and every body read carried
340
+ // `RenderTarget_Options` (the census answer, from the call sites), while
341
+ // the binding that initializes the cell both of those read through carried
342
+ // `{}` -- 26 unmet `binding-read-conversion:record(...;)->record(... 20
343
+ // fields ...)` obligations on the three.js app, one per read, and not one of them a
344
+ // capability that was missing. Three authorities over one parameter, the
345
+ // same shape `parameter-slot.ts`'s header records for rest parameters, and
346
+ // closed the same way. Where the parameter DOES state a type the census
347
+ // publishes nothing and the checker still answers, so the annotated
348
+ // spellings this function compensates for are untouched.
349
+ // The mapper's own answer for the parameter, not the checker's `ts.Type`
350
+ // re-interned: for a destructured parameter the mapper lays the value out
351
+ // as the array its call sites pass (`impliedPatternArrayElementAt`), where
352
+ // the checker's tuple would put a record in the slot the pattern then
353
+ // reads as an array.
354
+ const declaredType = context.types.typeAt(node);
355
+ const fallbackType = context.types.typeAt(node.initializer);
356
+ const bodyType = isUndefinedType(fallbackType, context.table) ? declaredType : withoutUndefinedMember(declaredType, context.table);
357
+ // The raw argument -- what the caller physically passed -- is the declared
358
+ // type with `undefined` present, and it is asked of the CHECKER rather than
359
+ // built here, because it has to be the same interned shape
360
+ // `SignatureParameter.slot` is (`normalize/parameter-slot.ts`): the ABI
361
+ // declares that slot and this operand reads it, and two spellings of one
362
+ // union are two different shapes. Interning `union(bodyType, undefined)`
363
+ // directly is the spelling that differs: where `bodyType` is itself a union
364
+ // -- `f(x: T | null = null)`, which JSDoc writes as `@param {?T} [x=null]`
365
+ // and three.js writes throughout -- that nests a union inside a union, and
366
+ // a nested one derives as "an optional payload that is itself optional",
367
+ // which is the carrier one flag cannot hold. `getNullableType` flattens, so
368
+ // the three-armed union reaches the deriver as three arms.
369
+ const rawType = context.table.intern({ kind: 'union', members: [declaredType, context.types.typeOf(context.checker.getUndefinedType())] });
370
+ const valueId = mintOperationId(context.ordinals, candidate.id, 'reference');
371
+ const valueResult = mintResult(valueId, 'value', rawType);
372
+ const valueOperation = {
373
+ id: valueId,
374
+ family: 'reference',
375
+ form: 'parameter-value',
376
+ strict: true,
377
+ unresolvableThrows: false,
378
+ hasNoCell: false,
379
+ caller: candidate.caller,
380
+ // Supplied by the frame the caller established, exactly as `this`'s own
381
+ // `{kind: 'receiver'}` operand is (`references.ts`'s `buildThisReference`):
382
+ // nothing here evaluates it, so it is recorded as provenance rather than
383
+ // as a runtime step this operation performs.
384
+ operands: [operand('argument', 0, { kind: 'parameter', ordinal: abiOrdinalOf(node) }, rawType, { kind: 'provenance' })],
385
+ results: [valueResult],
386
+ completion: normalCompletion,
387
+ effects: pureEffects,
388
+ evaluationOrdinal: candidate.evaluationOrdinal
389
+ };
390
+ const defaultId = mintOperationId(context.ordinals, candidate.id, 'destructuring');
391
+ const defaultResult = mintResult(defaultId, 'value', bodyType);
392
+ const defaultOperation = {
393
+ id: defaultId,
394
+ family: 'destructuring',
395
+ form: 'default-value',
396
+ caller: candidate.caller,
397
+ operands: [
398
+ operand('extracted', 0, { kind: 'result', result: valueResult.id }, rawType, { kind: 'provenance' }),
399
+ // The fallback is the initializer expression's own value. `bodyType`
400
+ // describes the merge result after either the supplied argument or the
401
+ // default wins; using it on this incoming edge erases the initializer's
402
+ // physical carrier before conversion planning. A static `null` property
403
+ // used as a default then masquerades as the parameter's broad Object
404
+ // annotation and asks the emitter to convert a constructor carrier into
405
+ // the call-site-derived image union. Keep the edge typed by the already
406
+ // computed initializer answer and let the merge perform the one real
407
+ // conversion, from that value into `bodyType`.
408
+ operand('fallback', 0, cited.source, fallbackType)
409
+ ],
410
+ results: [defaultResult],
411
+ completion: normalCompletion,
412
+ effects: { readsMutableState: false, writesMutableState: false, allocates: false, callsUserCode: cited.source.kind === 'result' },
413
+ evaluationOrdinal: candidate.evaluationOrdinal
414
+ };
415
+ const defaultEdges = [{ kind: 'value', result: valueResult.id, to: defaultId, role: 'extracted', ordinal: 0 }];
416
+ const fallbackEdge = resultEdge(cited.source, defaultId, 'fallback', 0);
417
+ if (fallbackEdge)
418
+ defaultEdges.push(fallbackEdge);
419
+ const bindId = mintOperationId(context.ordinals, candidate.id, 'binding');
420
+ const bindOperation = {
421
+ id: bindId,
422
+ family: 'binding',
423
+ action: 'initialize',
424
+ declaration: context.identities.declarationIdOf(node),
425
+ mutable: true,
426
+ temporalDeadZone: false,
427
+ parameterInitialization: true,
428
+ caller: candidate.caller,
429
+ operands: [operand('initializer', 0, { kind: 'result', result: defaultResult.id }, bodyType)],
430
+ results: [mintResult(bindId, 'value', bodyType)],
431
+ completion: normalCompletion,
432
+ effects: { ...pureEffects, writesMutableState: true },
433
+ evaluationOrdinal: candidate.evaluationOrdinal
434
+ };
435
+ const bindEdge = { kind: 'value', result: defaultResult.id, to: bindId, role: 'initializer', ordinal: 0 };
436
+ return { kind: 'operations', operations: [valueOperation, defaultOperation, bindOperation], edges: [...defaultEdges, bindEdge] };
437
+ };
438
+ /**
439
+ * A formal parameter: one binding, initialized from the caller's frame.
440
+ *
441
+ * A rest parameter is an ordinary binding: the language binds it to one Array
442
+ * holding the trailing arguments, and that Array is a single frame slot like
443
+ * any other. What varies is the *argument* count, which is the caller's problem,
444
+ * not this binding's.
445
+ *
446
+ * A pattern-named parameter still binds one cell: `function f({a, b})` gives
447
+ * the frame slot no *user-visible* name, but the language does hold that value
448
+ * while the pattern destructures it, and the elements read it from there. So it
449
+ * publishes the same `initialize` every other parameter does -- the declaration
450
+ * it names is the parameter itself -- and the destructuring producer cites that
451
+ * result as the pattern's source. Contributing nothing here is what left every
452
+ * element of such a pattern with no value to read.
453
+ *
454
+ * A default initializer on a plain identifier mints three operations, not
455
+ * one, via `contributeDefaultedParameter` above: the raw argument as its own
456
+ * citable value, the guarded default itself, and the named binding this
457
+ * parameter introduces -- initialized from the default's result rather than
458
+ * the raw argument directly. A pattern reads that same initialized cell, so
459
+ * its extractions naturally follow the completed default operation.
460
+ */
461
+ const contributeParameter = (candidate, node, context) => {
462
+ // `function f(this: T)` declares the receiver's type; it is erased and has no
463
+ // argument slot, so there is no binding here to introduce.
464
+ if (ts.isIdentifier(node.name) && node.name.text === 'this')
465
+ return { kind: 'operations', operations: [], edges: [] };
466
+ // A type-level or bodyless parameter list (an index signature, a method
467
+ // signature, a function type, an ambient declaration, an overload with no
468
+ // implementation) is never called, so there is no frame slot for this
469
+ // binding to read -- nothing is missing here, there is simply nothing to
470
+ // introduce, the same "not every candidate names a gap" answer a
471
+ // pattern-nested BindingElement gives above.
472
+ if (!hasArgumentFrame(node))
473
+ return { kind: 'operations', operations: [], edges: [] };
474
+ if (node.initializer) {
475
+ return contributeDefaultedParameter(candidate, node, context);
476
+ }
477
+ const type = context.types.typeAt(node);
478
+ const id = mintOperationId(context.ordinals, candidate.id, 'binding');
479
+ const operation = {
480
+ id,
481
+ family: 'binding',
482
+ action: 'initialize',
483
+ declaration: context.identities.declarationIdOf(node),
484
+ // A parameter is an ordinary mutable binding, and it is bound before the
485
+ // body runs, so there is no dead zone a read could fall into.
486
+ mutable: true,
487
+ temporalDeadZone: false,
488
+ parameterInitialization: true,
489
+ caller: candidate.caller,
490
+ operands: [operand('initializer', 0, { kind: 'parameter', ordinal: abiOrdinalOf(node) }, type)],
491
+ results: [mintResult(id, 'value', type)],
492
+ completion: normalCompletion,
493
+ effects: { ...pureEffects, writesMutableState: true },
494
+ evaluationOrdinal: candidate.evaluationOrdinal
495
+ };
496
+ return { kind: 'operations', operations: [operation], edges: [] };
497
+ };
498
+ /**
499
+ * Whether a declaration is ambient: `declare const x`, or anything inside a
500
+ * `declare module` / `.d.ts`.
501
+ *
502
+ * An ambient declaration states that something exists without defining it: the
503
+ * program never introduces the cell, a host does. That is not a reason to
504
+ * refuse it -- it is a different *kind* of introduction, one whose carrier
505
+ * still comes from the declared type like any other binding's, but whose
506
+ * storage is `external` rather than `local`/`region` (`BindingStorage`,
507
+ * projection/bindings.ts) and whose obligation is a host-boundary capability
508
+ * rather than a carrier-selection one (`buildExternalBindingObligation`,
509
+ * preflight/run.ts). Emitting a definition for it regardless -- as though the
510
+ * program itself owned the cell -- is what would be silently wrong: a null
511
+ * function pointer called through, or a zeroed record loaded from.
512
+ */
513
+ const isAmbient = (node) => {
514
+ if ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Ambient) !== 0)
515
+ return true;
516
+ // `declare module "x" { const y: T }` marks only the module, so the walk is
517
+ // what catches a declaration nested inside one.
518
+ for (let current = node.parent; current; current = current.parent) {
519
+ if (ts.isModuleDeclaration(current) && (ts.getCombinedModifierFlags(current) & ts.ModifierFlags.Ambient) !== 0)
520
+ return true;
521
+ }
522
+ return false;
523
+ };
524
+ /**
525
+ * A `for`-`of`/`for`-`in` loop variable (`const value` in `for (const value of
526
+ * values)`) has no `=` initializer of its own -- ECMA-262 assigns it from the
527
+ * loop's own `IteratorStep`/enumerate step instead, at the head of every
528
+ * iteration. `mintIteratorSteps` (protocol.ts) reserves `next` at a fixed
529
+ * ordinal -- 2 -- specifically so a citation like this one can be built from
530
+ * the enclosing loop's identity alone, without knowing which loop variant (or
531
+ * which of its steps this compiler can actually lower) produced it: this
532
+ * returns the same `SemanticResultId` regardless of whether that `next` takes
533
+ * the array-native fast path or the general dynamic protocol.
534
+ *
535
+ * Returns `null` for anything that is not exactly this shape -- a plain `let x`
536
+ * with no initializer stays an ordinary uninitialized declaration.
537
+ */
538
+ const forOfLoopVariableNextResult = (node, context) => {
539
+ if (node.initializer || !ts.isIdentifier(node.name))
540
+ return null;
541
+ const list = node.parent;
542
+ if (!ts.isVariableDeclarationList(list))
543
+ return null;
544
+ const loop = list.parent;
545
+ if (!(ts.isForOfStatement(loop) || ts.isForInStatement(loop)) || loop.initializer !== list)
546
+ return null;
547
+ return semanticResultId(operationId(context.identities.nodeIdOf(loop), 'protocol', 2), 'value');
548
+ };
549
+ /**
550
+ * The per-iteration WRITE a for-of/for-in loop performs into a bare
551
+ * identifier reused as its own head -- `var v; for (v of xs) { ... }`, where
552
+ * `v` carries no `var`/`let`/`const` of its own at the loop and so mints no
553
+ * `VariableDeclaration` candidate for `contributeVariableDeclaration` above to
554
+ * bind. `census.ts`'s `isForOfLoopHeadWriteTarget` is what routes this exact
555
+ * node shape to the `binding` family at all -- see its own header for why the
556
+ * write had no producer before this one.
557
+ *
558
+ * Modelled as a `write` (not `initialize`) `BindingOperation`, exactly the
559
+ * shape `computations.ts`'s `bindingWriteFor` builds for `x = expr`: the
560
+ * declaration is resolved from the identifier's own SYMBOL
561
+ * (`identities.symbolDeclarationId`), never minted fresh at this reference, so
562
+ * the store lands in the SAME cell `var v`'s own declaration owns. The value
563
+ * stored is the loop's own `next` result, cited by the identical fixed
564
+ * `protocol` ordinal `forOfLoopVariableNextResult` cites for the declared-in-
565
+ * loop case -- `mintIteratorSteps` reserves it regardless of which loop
566
+ * variant or protocol path produced it.
567
+ */
568
+ const contributeForOfLoopHeadWrite = (candidate, node, context) => {
569
+ const loop = node.parent;
570
+ const symbol = context.checker.getSymbolAtLocation(node);
571
+ if (!symbol)
572
+ return { kind: 'blocked', blocker: blocked(candidate.id, 'binding', 'a for-of/for-in loop head names no resolvable symbol', null) };
573
+ const declaration = context.identities.symbolDeclarationId(symbol);
574
+ if (!declaration) {
575
+ return {
576
+ kind: 'blocked',
577
+ blocker: blocked(candidate.id, 'binding', 'a for-of/for-in loop head write names a symbol with no resolvable declaration', null)
578
+ };
579
+ }
580
+ const declarationNode = context.identities.declarationOfSymbol(symbol);
581
+ const { mutable, temporalDeadZone } = declarationNode ? bindingKindOf(declarationNode) : { mutable: true, temporalDeadZone: false };
582
+ const value = semanticResultId(operationId(context.identities.nodeIdOf(loop), 'protocol', 2), 'value');
583
+ const type = context.types.typeAt(node);
584
+ const id = mintOperationId(context.ordinals, candidate.id, 'binding');
585
+ const operation = {
586
+ id,
587
+ family: 'binding',
588
+ action: 'write',
589
+ declaration,
590
+ mutable,
591
+ temporalDeadZone,
592
+ ...(context.commonJsBindings.has(declaration)
593
+ ? {
594
+ commonJs: {
595
+ global: context.commonJsBindings.get(declaration),
596
+ owner: regionId(context.identities.nodeIdOf(node.getSourceFile()), 'module-body')
597
+ }
598
+ }
599
+ : {}),
600
+ caller: candidate.caller,
601
+ operands: [operand('value', 0, { kind: 'result', result: value }, type)],
602
+ results: [mintResult(id, 'value', type)],
603
+ completion: normalCompletion,
604
+ effects: { ...pureEffects, writesMutableState: true },
605
+ evaluationOrdinal: candidate.evaluationOrdinal
606
+ };
607
+ return { kind: 'operations', operations: [operation], edges: [{ kind: 'value', result: value, to: id, role: 'value', ordinal: 0 }] };
608
+ };
609
+ const contributeVariableDeclaration = (candidate, node, context) => {
610
+ const ambient = isAmbient(node);
611
+ const declaration = context.identities.declarationIdOf(node);
612
+ // The linkage name is read here and nowhere else in the compiler: an ambient
613
+ // declaration's spelling is the ABI contract with the host that defines it,
614
+ // exactly as a C++ `extern` declaration's spelling is the contract with
615
+ // whatever translation unit defines it elsewhere. Every downstream consumer
616
+ // (projection, preflight, emission) carries this string as opaque data; none
617
+ // of them may re-derive it from a name, a symbol, or source text of their
618
+ // own. The checker already rejects an ambient declaration with a
619
+ // destructured name (`declare const { a }: T` is not valid TypeScript), so a
620
+ // non-identifier name here means the census and the checker have drifted.
621
+ let external;
622
+ if (ambient) {
623
+ if (!ts.isIdentifier(node.name)) {
624
+ return {
625
+ kind: 'blocked',
626
+ blocker: blocked(candidate.id, 'binding', 'an ambient declaration with a destructured name has no single linkage symbol for a host to define', 'P6')
627
+ };
628
+ }
629
+ // Unless an installed host has said it does not provide this name. An
630
+ // ambient declaration is external BECAUSE some host defines it, and a host
631
+ // that denied it is precisely the case where that stops being true --
632
+ // `extern` for it names a symbol no object file defines. The same census
633
+ // answers the value's TYPE as `undefined` (structural-layout-type.ts), so
634
+ // the storage class and the carrier are one decision, not two.
635
+ if (context.absentGlobals.typeAt(node) === null)
636
+ external = { linkageName: node.name.text };
637
+ }
638
+ const { mutable, temporalDeadZone } = bindingKindOf(node);
639
+ const initializer = node.initializer;
640
+ const loopValueResult = initializer ? null : forOfLoopVariableNextResult(node, context);
641
+ const operands = [];
642
+ if (initializer) {
643
+ const cited = citeExpressionResult(initializer, context);
644
+ if (cited.kind === 'unmodelled')
645
+ return { kind: 'blocked', blocker: blocked(candidate.id, 'binding', cited.reason, null) };
646
+ operands.push(operand('initializer', 0, cited.source, context.types.typeAt(initializer)));
647
+ }
648
+ else if (loopValueResult) {
649
+ operands.push(operand('initializer', 0, { kind: 'result', result: loopValueResult }, context.types.typeAt(node)));
650
+ }
651
+ const id = mintOperationId(context.ordinals, candidate.id, 'binding');
652
+ const operation = {
653
+ id,
654
+ family: 'binding',
655
+ action: initializer || loopValueResult ? 'initialize' : 'declare',
656
+ declaration,
657
+ mutable,
658
+ temporalDeadZone,
659
+ ...(context.commonJsBindings.has(declaration)
660
+ ? {
661
+ commonJs: {
662
+ global: context.commonJsBindings.get(declaration),
663
+ owner: regionId(context.identities.nodeIdOf(node.getSourceFile()), 'module-body')
664
+ }
665
+ }
666
+ : {}),
667
+ caller: candidate.caller,
668
+ operands,
669
+ results: [mintResult(id, 'value', context.types.typeAt(node))],
670
+ completion: normalCompletion,
671
+ effects: { ...pureEffects, writesMutableState: true },
672
+ evaluationOrdinal: candidate.evaluationOrdinal,
673
+ ...(external ? { external } : {})
674
+ };
675
+ return { kind: 'operations', operations: [operation], edges: [] };
676
+ };
677
+ export const createBindingProducer = (context) => ({
678
+ family: 'binding',
679
+ contribute: (candidate) => {
680
+ const node = candidate.node;
681
+ // A BindingElement exists only inside an ObjectBindingPattern or
682
+ // ArrayBindingPattern -- by construction it is always a destructuring
683
+ // introduction, whether or not its own name happens to be a plain
684
+ // identifier one level down.
685
+ if (ts.isBindingElement(node))
686
+ return contributeBindingElement(candidate, node, context);
687
+ if (ts.isParameter(node))
688
+ return contributeParameter(candidate, node, context);
689
+ if (ts.isVariableDeclaration(node)) {
690
+ // `const {a} = x` declares nothing at the declaration node itself: every
691
+ // name it introduces belongs to an element of the pattern, and each of
692
+ // those is its own candidate handled above.
693
+ if (ts.isObjectBindingPattern(node.name) || ts.isArrayBindingPattern(node.name)) {
694
+ return { kind: 'operations', operations: [], edges: [] };
695
+ }
696
+ return contributeVariableDeclaration(candidate, node, context);
697
+ }
698
+ // A bare identifier reused as a for-of/for-in loop's own head (`var v;
699
+ // for (v of xs)`) is the fourth and last shape `census.ts` routes to this
700
+ // family -- `isForOfLoopHeadWriteTarget` is the only thing that can have
701
+ // put an `Identifier` candidate here.
702
+ if (ts.isIdentifier(node))
703
+ return contributeForOfLoopHeadWrite(candidate, node, context);
704
+ // census.ts assigns the 'binding' family only to VariableDeclaration,
705
+ // BindingElement, Parameter, and for-of/for-in loop-head Identifier
706
+ // nodes; reaching here means the census and this producer have drifted
707
+ // out of sync.
708
+ throw new Error(`binding producer received a candidate of unexpected syntax kind ${ts.SyntaxKind[node.kind]}`);
709
+ }
710
+ });