@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,1157 @@
1
+ import { anyKeyedWriteTypes, prototypeMutatedConstructorTypes, proxyFallbackTypes } from './dynamic-fallback.js';
2
+ import ts from 'typescript';
3
+ import { structuralShapeKey } from './model/structural-types.js';
4
+ import { resolveHostMethod } from './host-methods.js';
5
+ import { componentId, positionKeyOfDeclaration, positionKeyOfNode, regionId } from '../identity/ids.js';
6
+ import { createStructuralTypeTable } from './model/structural-type-table.js';
7
+ import { censusProgram } from './normalize/census.js';
8
+ import { createIdentityTable, rootSpecialization } from './normalize/identities.js';
9
+ import { gatingEdges } from './normalize/gating.js';
10
+ import { normalizeProgram } from './normalize/normalize.js';
11
+ import { createEvaluationOrdinals, createOrdinalCounter } from './normalize/producers/mint.js';
12
+ import { intrinsicPropertyCallOf } from './normalize/intrinsic-property-call.js';
13
+ import { createStructuralMapper } from './normalize/structural.js';
14
+ import { censusDeclaredMembers } from './normalize/structural-declarations.js';
15
+ import { bodyReadsThis } from './normalize/structural-receiver.js';
16
+ import { censusInstantiations } from './normalize/instantiation.js';
17
+ import { censusSpecializations } from './normalize/specialization.js';
18
+ import { censusAbsentGlobals, platformDeclarationTest } from './normalize/absent-globals.js';
19
+ import { censusDeadTypeofGuards } from './normalize/dead-typeof-guards.js';
20
+ import { censusArgumentsObjects } from './normalize/arguments-objects.js';
21
+ import { censusUnresolvableNames } from './normalize/unresolvable-names.js';
22
+ import { censusGlobalHostMutations } from './normalize/global-host-mutations.js';
23
+ import { HostMutationTaint } from './normalize/host-mutation-keys.js';
24
+ import { createCensusComputedKeysOf } from './normalize/host-mutation-computed-keys.js';
25
+ import { closedCallableAuthorityOf } from './normalize/flow/callable-reach.js';
26
+ import { attachDeferredIntrinsicProtocolLedger, createDeferredIntrinsicProtocolLedger, failedIntrinsicProtocolRequirements, intrinsicProtocolRequirementKind } from './normalize/deferred-intrinsic-protocols.js';
27
+ import { prototypeKeyQuerySignature } from './normalize/host-mutation-keys.js';
28
+ import { explainIntrinsicProtocolFailure } from './normalize/intrinsic-prototype.js';
29
+ import { isAmbientDeclaration } from './ambient.js';
30
+ import { createReassignedBindingCensus } from './normalize/reassigned-bindings.js';
31
+ import { createCommonJsRequireCensus } from './normalize/commonjs-require.js';
32
+ import { censusCommonJsModuleRecords } from './normalize/commonjs-module-record.js';
33
+ import { censusNamespacePaths } from './normalize/namespace-paths.js';
34
+ import { numericIndexAbsenceProven, closedLiteralMemberAbsenceProven } from './normalize/derived-expression-type.js';
35
+ import { censusParameterBindings, emptyParameterBindingCensus, indexParameterBindingProgram } from './normalize/parameter-bindings.js';
36
+ import { composeReturnBindings } from './normalize/return-bindings.js';
37
+ import { withLocalBindings } from './normalize/local-bindings.js';
38
+ import { withFieldBindings } from './normalize/field-bindings.js';
39
+ import { censusCollectionBindings } from './normalize/collection-bindings.js';
40
+ import { censusObjectBagBindings, emptyObjectBagCensus } from './normalize/object-bag-bindings.js';
41
+ import { indexValueFlow } from './normalize/flow/value-flow.js';
42
+ import { attachClosedScriptScope, attachStatedModuleSet } from './normalize/flow/targets.js';
43
+ import { censusRefusalCounts } from './normalize/census-refusal.js';
44
+ import { createCellPolicyRegistry, defaultCellEvidencePolicies, buildCellFactsTable, publishCellFacts } from './normalize/cells/index.js';
45
+ import { settleBindingCensus } from './normalize/binding-fixpoint.js';
46
+ import { withJsDocTypeNames } from './normalize/jsdoc-type-names.js';
47
+ import { censusReachability, moduleEvaluationOrder, nodeIsReachable } from './normalize/reachability.js';
48
+ import { createProgram, defaultCompilerOptions } from './program.js';
49
+ import { createFrontendTiming } from './frontend-timing.js';
50
+ import { classHeritageOf } from './class-heritage.js';
51
+ import { constructorSlotSubclassesOf } from './constructor-slot-subclasses.js';
52
+ import { prototypeReparentingsOf } from './prototype-reparenting.js';
53
+ import { uninstantiableClassesOf } from './uninstantiable-classes.js';
54
+ import { interfaceImplementorsOf } from './interface-implementors.js';
55
+ import { interfaceFamiliesOf } from './interface-families.js';
56
+ import { ambientHostBindings, bindStandardClasses, dateDeclarationOf, stringObjectDeclarationOf, errorDeclarationsOf, functionDeclarationOf, generatorDeclarationOf, asyncGeneratorDeclarationOf, mapIteratorDeclarationOf, hostProtocolBindings, keyedCollectionDeclarationsOf, promiseDeclarationOf, regexpDeclarationsOf, standardBufferDeclarationsOf, typedArrayDeclarationsOf, typedArrayInstanceInterfaceNames, wellKnownSymbolDeclarationsOf } from './host-protocols.js';
57
+ /**
58
+ * The synthetic component every pre-graph diagnostic belongs to.
59
+ *
60
+ * A checker error happens before any authority component exists, so it cannot
61
+ * name a real one. Inventing a plausible-looking component id instead would let
62
+ * a reader join these rows against the graph and get an answer that is wrong.
63
+ */
64
+ const checkerComponent = componentId('op|checker|reference|0');
65
+ /**
66
+ * Checker errors the reachability walk relies on being reported wherever they
67
+ * occur. `reachability.ts` drops a statement whose only possible effect is a
68
+ * temporal-dead-zone throw because TypeScript reports a same-file use before
69
+ * declaration; a pruned statement carrying one of these would otherwise lose
70
+ * the throw silently.
71
+ */
72
+ const reachabilityPremiseDiagnosticCodes = new Set([2448, 2449, 2450, 2454, 2474]);
73
+ /** The innermost node of `file` whose span holds `position`. */
74
+ const nodeAtPosition = (file, position) => {
75
+ let current = file;
76
+ for (;;) {
77
+ const inner = ts.forEachChild(current, (child) => child.getStart(file) <= position && position < child.getEnd() ? child : undefined);
78
+ if (!inner)
79
+ return current;
80
+ current = inner;
81
+ }
82
+ };
83
+ /**
84
+ * Whether a checker error sits in code the program never runs.
85
+ *
86
+ * A package compiled from source is type-checked against the dependency
87
+ * versions this build resolved, not the ones its authors built with:
88
+ * `@hono/node-server`'s `upgradeWebSocket` handler assigns an object literal
89
+ * to hono's `WSContext`, whose newer source declares `#init`. The handler is
90
+ * pruned (`reachability.ts`, a closure factory nothing reads) and none of its
91
+ * types reach the compiled program, so its error describes nothing this
92
+ * compiler emits. A syntax error is never waived, and neither is anything
93
+ * outside a compiled source file or among the premises above.
94
+ */
95
+ const diagnosticIsInPrunedCode = (diagnostic, reachable, compiledFiles, syntactic) => {
96
+ const file = diagnostic.file;
97
+ if (!file || diagnostic.start === undefined || syntactic.has(diagnostic) || !compiledFiles.has(file))
98
+ return false;
99
+ if (reachabilityPremiseDiagnosticCodes.has(diagnostic.code))
100
+ return false;
101
+ return !nodeIsReachable(reachable, nodeAtPosition(file, diagnostic.start));
102
+ };
103
+ const translateDiagnostic = (diagnostic, ordinal) => {
104
+ const file = diagnostic.file;
105
+ const position = file && diagnostic.start !== undefined ? file.getLineAndCharacterOfPosition(diagnostic.start) : null;
106
+ return {
107
+ id: `checker/${diagnostic.code}/${ordinal}`,
108
+ component: checkerComponent,
109
+ operation: null,
110
+ missingPrimitive: null,
111
+ message: ts.flattenDiagnosticMessageText(diagnostic.messageText, ' '),
112
+ // Display only: this location never decides whether anything compiles.
113
+ location: file && position ? { file: file.fileName, line: position.line + 1, column: position.character + 1 } : null
114
+ };
115
+ };
116
+ /**
117
+ * The declaration identities an installed host denied.
118
+ *
119
+ * The projection places a cell for every ambient declaration the frontend's own
120
+ * census reached, and turns each into an `extern`. A name a host has said it
121
+ * does not provide still needs a cell -- a program that reads it must read
122
+ * something -- but it must not be an `extern`, because no object file defines
123
+ * it. This is the set that tells the two apart, derived from the one census
124
+ * that also answers the value's TYPE, so a cell cannot be external in one place
125
+ * and absent in another. See `absent-globals.ts`.
126
+ */
127
+ /**
128
+ * Whether every file in this build evaluates strict regardless of its own
129
+ * syntax. `alwaysStrict` -- implied by `strict` -- is the whole answer: it makes
130
+ * tsc parse each file in strict mode and write a `'use strict'` prologue into
131
+ * the emitted output, so node runs it strict whether it is a Module or a Script.
132
+ *
133
+ * The `module` setting is NOT this fact, though it stood here as one. `module:
134
+ * ESNext` says how a MODULE is emitted; it does not make a file with no import
135
+ * and no export into a module, and such a file is a Script and sloppy unless
136
+ * something else says otherwise. Reading the module setting here answered
137
+ * "strict" for every script in an ESM build and "sloppy" for every file in a
138
+ * `module: CommonJS` build that set `strict: true` -- wrong in both directions.
139
+ * The per-file half (external module, `'use strict'` prologue, class body) is
140
+ * `isStrictContext`'s, and it already had it.
141
+ */
142
+ const buildIsAlwaysStrict = (options) => options.alwaysStrict ?? options.strict ?? false;
143
+ const absentBindingIds = (absent, identities) => {
144
+ const denied = new Set();
145
+ for (const declaration of absent.declarations)
146
+ denied.add(identities.declarationIdOf(declaration));
147
+ return denied;
148
+ };
149
+ /**
150
+ * Whether reachable, non-declaration code spells any of `names` -- the
151
+ * `hostFunctions` of a host whose programs take the census wildcard
152
+ * (`FrontendInput.hostFunctionsRefusingObjectPrototypeAbsenceProofs`). The
153
+ * built-in plugins are installed for every compile, so the host's statement
154
+ * alone would refuse the proofs for programs that never touch it; naming one
155
+ * of its functions is what makes a program that host's. A name suffices: the
156
+ * host owns those spellings, and the emitter treats a call by name as a call
157
+ * into it.
158
+ */
159
+ const reachableCodeNamesAny = (files, reachable, names) => {
160
+ if (names.size === 0)
161
+ return false;
162
+ const visit = (node) => (ts.isIdentifier(node) && names.has(node.text)) || ts.forEachChild(node, visit) === true;
163
+ return files.some((file) => !file.isDeclarationFile && reachable.statementsOf(file).some(visit));
164
+ };
165
+ export const runFrontend = (input) => {
166
+ const timing = createFrontendTiming('phases');
167
+ const compiled = createProgram({
168
+ ...(input.packageSources ? { packageSources: input.packageSources } : {}),
169
+ ...(input.declarationModules ? { declarationModules: input.declarationModules } : {}),
170
+ rootFileNames: input.rootFileNames,
171
+ options: input.javaScriptSources
172
+ ? // `maxNodeModuleJsDepth` alongside `allowJs` for the reason `program.ts`'s
173
+ // `javaScriptAdmission` states: its default is `0`, which refuses a vendor
174
+ // `.js` body one `node_modules` hop out from the compiled roots -- which is
175
+ // where every one of them is. The corpus's own generated projects have
176
+ // carried both for the same reason.
177
+ { ...defaultCompilerOptions, allowJs: true, checkJs: true, maxNodeModuleJsDepth: 100 }
178
+ : defaultCompilerOptions,
179
+ dynamicFallback: input.dynamicFallback ?? false,
180
+ projectFileName: input.projectFileName ?? null,
181
+ ...(input.sourceOverlay ? { sourceOverlay: input.sourceOverlay } : {}),
182
+ ...(input.moduleResolution ? { moduleResolution: input.moduleResolution } : {}),
183
+ commonJsGlobals: input.commonJsGlobals ?? new Map(),
184
+ commonJsBuiltinModules: input.commonJsBuiltinModules ?? new Map(),
185
+ commonJsBuiltinModuleSources: input.commonJsBuiltinModuleSources ?? new Map(),
186
+ hostMethodBindings: input.hostMethodBindings ?? new Map(),
187
+ ...(input.statedModuleSet ? { statedModuleSet: true } : {}),
188
+ ...(input.closedScriptScope ? { closedScriptScope: true } : {}),
189
+ sourceTransforms: input.sourceTransforms ?? []
190
+ });
191
+ timing.mark('program-and-diagnostics');
192
+ const hostMethodBindings = input.hostMethodBindings ?? new Map();
193
+ const table = createStructuralTypeTable();
194
+ // What this compilation reaches from its own entry points, decided once and
195
+ // read by every whole-program walk below. A project's file set is not its
196
+ // module graph -- `include` names what a typechecker should see, and an
197
+ // application's behaviour is what its entries import -- so a census that
198
+ // walked the file set compiled a different program than the one that runs.
199
+ // See `reachability.ts` for what it refuses to prune and why; nothing here
200
+ // changes what a type *means*, only which declarations are censused.
201
+ const reachable = censusReachability({
202
+ checker: compiled.checker,
203
+ files: compiled.sourceFiles,
204
+ // A CommonJS module is not an ESM entry: it runs only from its record's
205
+ // `require`, so it must not join `moduleEvaluationOrder`. Its body still
206
+ // has to be censused and lowered for that record to invoke, which is why
207
+ // the Program boundary supplies these static targets separately.
208
+ entries: [...compiled.entryFiles, ...compiled.commonJsSourceFiles],
209
+ ...(input.hostReachedMemberKeys ? { hostReachedMemberKeys: input.hostReachedMemberKeys } : {})
210
+ });
211
+ // Instantiations are censused before anything is normalized, because the
212
+ // answer is whole-program: which type a generic is instantiated at is decided
213
+ // by every call site together, and a walk that learned it as it went would
214
+ // give the first body it reached a different answer than the last.
215
+ timing.mark('reachability');
216
+ const instantiations = censusInstantiations(compiled.checker, compiled.sourceFiles, reachable);
217
+ // Before the mapper, because the mapper is the one authority that answers a
218
+ // node's type and this contradicts the checker at some of those nodes.
219
+ // Which property accesses are source-namespace paths and which are
220
+ // namespace-qualified members: a checker question asked once, read by the
221
+ // census's family rule and by `citeExpressionResult`'s prediction of it.
222
+ // See `normalize/namespace-paths.ts`.
223
+ const namespacePaths = censusNamespacePaths(compiled.checker);
224
+ const specializations = censusSpecializations(compiled.checker, compiled.sourceFiles, reachable, namespacePaths);
225
+ timing.mark('instantiations-and-specializations');
226
+ // Whole-program for the same reason instantiations are: which type an
227
+ // unannotated parameter holds is decided by every call site together, and a
228
+ // walk that learned it as it went would give the first body it reached a
229
+ // different answer than the last. See `parameter-bindings.ts`.
230
+ // Composed with the RETURN census, in that order: a return type is resolved
231
+ // from expressions whose identifiers may be parameters this census bound, so
232
+ // the parameter answers must be settled before the return walk consults them.
233
+ // The reverse edge -- a bound return re-opening a parameter's own fixpoint --
234
+ // is not taken here; `parameter-bindings.ts` runs its own looser return
235
+ // resolution inside that fixpoint already, so what this adds is the strict
236
+ // reading (recursion detected, disagreement refused, `as` casts stopped at),
237
+ // not a first one. See `return-bindings.ts`.
238
+ // Composed a third time, with the LOCAL-BINDING census: an unannotated
239
+ // `let`/`var` cell with no initializer, filled in later by exactly the
240
+ // writes the program makes to it. See `local-bindings.ts`'s own header
241
+ // comment for why this needs to run after (and be given) the settled
242
+ // parameter+return census rather than reopening either fixpoint.
243
+ //
244
+ // Run TWICE. `censusParameterBindings` used to be the one census with no
245
+ // upstream at all -- `withReturnBindings`/`withLocalBindings` compose OVER
246
+ // its output, but nothing ever composed back INTO it, so a call site's
247
+ // argument was typed only from the checker's own evidence and this
248
+ // parameter census's own internal fixpoint. A parameter whose call sites
249
+ // pass an expression the RETURN or LOCAL census alone can type (`state`,
250
+ // `extensions`, `m.elements`) stayed `any` forever, because by the time
251
+ // those censuses learned it, the parameter census had already finished.
252
+ //
253
+ // A second round, given the first round's fully composed census as its
254
+ // `upstream`, closes that gap: `parameter-bindings.ts`'s `known()` now
255
+ // tries `upstream.typeAt(node)` wherever the checker's own answer is
256
+ // unusable, ahead of its own machinery reconstructing one. See the commit
257
+ // this landed in for the measured effect on the three.js app and the
258
+ // check for whether a third round moves anything further.
259
+ //
260
+ // `withFieldBindings` sits LAST in each round, where its own header says it
261
+ // belongs. A class field is the fourth storage position with no annotation
262
+ // and a knowable answer, and it was the one still unread: three.js writes
263
+ // `this.image`, `this.format`, `this.colorSpace` in a constructor and never
264
+ // types them, so every `texture.format` read is `any` and every parameter
265
+ // that receives one inherits it. That is what the boxed carriers in
266
+ // `WebGLTextures.js` (4435) and `WebGLRenderer.js` (3982) are made of -- not
267
+ // thousands of independent decisions, but one unread position cascading
268
+ // through reads and member accesses (14349 `Identifier`, 6836
269
+ // `PropertyAccessExpression` across the three.js app).
270
+ // `withJsDocTypeNames` sits OUTERMOST, so a type the program STATED outranks
271
+ // one inferred from an observed sample of call sites -- the same precedence a
272
+ // TS annotation already has, which stops the call-site census outright. It is
273
+ // last in the chain and first to answer.
274
+ //
275
+ // The RETURN census built inside the final round is kept, not rebuilt.
276
+ // `producers/invocations.ts` reads a call's result through this composed
277
+ // view and has to state the same call's CALLEE return from the same
278
+ // authority; asking a second census would let the two settle differently.
279
+ // See `composeReturnBindings`.
280
+ // The array/collection census, FOR THIS ROUND -- computed from the PRIOR
281
+ // round's settled parameter view (`upstream`; empty on round one, since
282
+ // nothing is settled yet) and handed to every census the round runs below,
283
+ // not only to `createStructuralMapper` after the whole fixpoint has
284
+ // already finished with it. This closes the gap `hCALL`'s investigation
285
+ // traced end to end: `findLightProbeGrid( volumes, object )`
286
+ // (`WebGLRenderer.js`) returns `volumes[ 0 ]`, where `volumes`'s real
287
+ // evidence is a module-scope `const lightProbeGridArray = []` filled by
288
+ // `.push` elsewhere -- exactly what this census exists to type, and
289
+ // exactly the shape `return-bindings.ts` (and, the same way,
290
+ // `local-bindings.ts`/`field-bindings.ts`) could not reach before, because
291
+ // this census ran only once, after the whole fixpoint had already
292
+ // settled. See those modules' own `collections` parameter.
293
+ //
294
+ // Kept OUTSIDE `compose` (rather than recomputed after the loop below from
295
+ // the fully-settled `parameters`) so the FINAL round's instance -- the one
296
+ // every census in that round actually asked -- is the SAME instance
297
+ // `createStructuralMapper` is built from below. A fresh third computation
298
+ // over `parameters` would answer some nodes MORE precisely (round two's
299
+ // own improvements would be visible to it) but would then disagree with
300
+ // what round two's own return/local/field censuses actually consulted
301
+ // while producing `parameters` in the first place -- two authorities over
302
+ // one question, which this compiler treats as a defect wherever it is
303
+ // found elsewhere and must not introduce here.
304
+ // Beside the collection census, for the same reason and on the same terms:
305
+ // the LAST round's bag census, so the structural mapper reads the identical
306
+ // instance the round-two return/local censuses consulted while they produced
307
+ // `parameters`.
308
+ // One shared discovery walk per inference view, consumed by the binding
309
+ // domains. Syntax stays fixed; receiver protocols can become known as the
310
+ // prior census improves, so the index is refreshed inside `compose`.
311
+ /**
312
+ * The round's census answer for an expression the CHECKER types `any` --
313
+ * `indexValueFlow`'s one census-dependent input, and the reason the index is
314
+ * now built per round rather than once.
315
+ *
316
+ * A `.push`/`.set`/`.fill` receiver is admitted by its TYPE
317
+ * (`isArrayReceiver` and friends), so a receiver nothing has typed yet
318
+ * records no write at all: three's `WebGLShaderCache` fills
319
+ * `materialShaders` and `WebGLPrograms` fills its `array` through receivers
320
+ * the checker cannot type, and every element they hold sat at a push this
321
+ * index did not state. 170 such receivers on the three.js app.
322
+ *
323
+ * `any`/`unknown` is filtered here rather than in the index so that a census
324
+ * answer no better than the checker's cannot displace it.
325
+ */
326
+ const censusTypeVia = (upstream) => (expression) => {
327
+ const stated = upstream.typeAt(expression);
328
+ if (!stated || (stated.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
329
+ return null;
330
+ return stated;
331
+ };
332
+ // Round one has no census, so its index is byte-identical to the single one
333
+ // this replaced; the last round's is what `bags` below reads, since that
334
+ // census is composed against the settled `parameters` and must see the same
335
+ // write edges the census that settled it saw.
336
+ const intrinsicProtocols = createDeferredIntrinsicProtocolLedger({
337
+ refuseObjectPrototypeAbsenceProofs: reachableCodeNamesAny(compiled.sourceFiles, reachable, input.hostFunctionsRefusingObjectPrototypeAbsenceProofs ?? new Set())
338
+ });
339
+ const buildIsStrict = buildIsAlwaysStrict(compiled.program.getCompilerOptions());
340
+ const baseValueFlow = indexValueFlow(compiled.checker, compiled.sourceFiles, reachable, undefined, undefined, undefined, buildIsStrict);
341
+ attachDeferredIntrinsicProtocolLedger(baseValueFlow, intrinsicProtocols);
342
+ // Only a caller that compiled a module graph has stated what the
343
+ // application IS; without it `exportIsUnimported` answers false everywhere.
344
+ const statedModules = input.statedModuleSet
345
+ ? { files: compiled.sourceFiles, entries: [...compiled.entryFiles, ...compiled.commonJsSourceFiles], reachable }
346
+ : null;
347
+ if (statedModules)
348
+ attachStatedModuleSet(baseValueFlow, statedModules);
349
+ const scriptScope = input.closedScriptScope
350
+ ? {
351
+ files: new Set(compiled.sourceFiles.filter((file) => !file.isDeclarationFile && !ts.isExternalModule(file) && !compiled.commonJsSourceFiles.includes(file)))
352
+ }
353
+ : null;
354
+ if (scriptScope)
355
+ attachClosedScriptScope(baseValueFlow, scriptScope);
356
+ // The whole program, declarations included: the census authenticates the
357
+ // wrapper names against the host's declaration file, and handed only the
358
+ // implementation files it found no wrapper to authenticate against, so no
359
+ // module ever proved its record (`nativeRecord` was never set).
360
+ const commonJsModuleRecords = censusCommonJsModuleRecords(compiled.checker, compiled.program.getSourceFiles(), input.commonJsGlobals ?? new Map(), compiled.runtimeModuleTargetOf, compiled.sourceFileOf);
361
+ // This index retains syntax and checker facts from the initial flow view.
362
+ // Unlike receiver protocol recognition in `valueFlow`, those do not change
363
+ // between inference rounds. Parameter call attribution may still improve
364
+ // within each round without rediscovering its syntactic inputs.
365
+ // Discovery belongs to one census: inference and reference citation consume
366
+ // the same lexical frames and never enumerate arguments uses independently.
367
+ const argumentsObjects = censusArgumentsObjects(compiled.checker, compiled.sourceFiles);
368
+ const parameterIndex = indexParameterBindingProgram(compiled.checker, compiled.sourceFiles, reachable, baseValueFlow, argumentsObjects);
369
+ const compose = (upstream) => {
370
+ // Round one has no census to refine the index with, and
371
+ // `GEA_FLOW_CENSUS_OFF` pins every round to that same base -- which is what
372
+ // makes the flag's arm comparable with the one it measures against.
373
+ // Rebuilt every round on purpose: reusing the previous round's index when
374
+ // the census answers it consulted are unchanged was tried and measured on
375
+ // the three.js app (2026-09-14) -- no round ever qualified, because the answers
376
+ // move until the very round that settles, and holding the previous index
377
+ // alive across the boundary raised the peak from 7 GB to 11 GB.
378
+ const valueFlow = upstream && !process.env['GEA_FLOW_CENSUS_OFF']
379
+ ? indexValueFlow(compiled.checker, compiled.sourceFiles, reachable, censusTypeVia(upstream), upstream.callDeclarationAt, upstream.callTargetsAt, buildIsStrict, upstream.explicitThisAt)
380
+ : baseValueFlow;
381
+ attachDeferredIntrinsicProtocolLedger(valueFlow, intrinsicProtocols);
382
+ if (statedModules)
383
+ attachStatedModuleSet(valueFlow, statedModules);
384
+ if (scriptScope)
385
+ attachClosedScriptScope(valueFlow, scriptScope);
386
+ const collectionsThisRound = censusCollectionBindings(compiled.checker, compiled.sourceFiles, reachable, upstream ?? emptyParameterBindingCensus, valueFlow);
387
+ // MOVED INSIDE the fixpoint, exactly as `collections` was, and the long
388
+ // comment that used to sit below this loop explaining why it could not be
389
+ // was WRONG. It argued that a bag's answer is an `ObjectBagShape` with no
390
+ // `ts.Type` form, so no `ts.Type`-shaped resolver could ever consume one.
391
+ // True of the SHAPE and false of the SLOTS: a member's and an index's
392
+ // observed types are plain `ts.Type`s (`ObjectBagShape.members` and
393
+ // `.index` hold them), which is what `slotTypeAt` hands back.
394
+ //
395
+ // The refusal that bought: three's `WebGLExtensions` caches every
396
+ // extension in a `{}` and reads it straight back, so
397
+ // `return extensions[ name ]` refused as `return-index-signature-absent`
398
+ // while this census had already typed the index from the very next line's
399
+ // `extensions[ name ] = extension`. Everything downstream of
400
+ // `extensions.get( ... )` -- `WebGLUtils.convert`'s `extension`, the
401
+ // largest single boxed declaration in the three.js build -- was dynamic
402
+ // behind that one refusal.
403
+ const bagsThisRound = process.env['GEA_BAG_OFF']
404
+ ? emptyObjectBagCensus
405
+ : censusObjectBagBindings(compiled.checker, compiled.sourceFiles, reachable, upstream ?? emptyParameterBindingCensus, valueFlow);
406
+ const returnStage = composeReturnBindings(compiled.checker, compiled.sourceFiles, reachable, censusParameterBindings(compiled.checker, compiled.sourceFiles, reachable, upstream,
407
+ // `GEA_PARAM_INDEX_OFF` hands the census no index, so it builds its
408
+ // own -- which is what every round used to do. Kept the way
409
+ // `GEA_BAG_OFF` and `GEA_FLOW_CENSUS_OFF` are kept: the arms of the
410
+ // measurement that justified this have to stay runnable from one
411
+ // build, or the next person cannot check the claim.
412
+ process.env['GEA_PARAM_INDEX_OFF'] ? undefined : parameterIndex, valueFlow), collectionsThisRound, valueFlow, bagsThisRound);
413
+ const parameters = withJsDocTypeNames(compiled.checker, compiled.sourceFiles, reachable, withFieldBindings(compiled.checker, compiled.sourceFiles, reachable, withLocalBindings(compiled.checker, compiled.sourceFiles, reachable, returnStage.view, collectionsThisRound, valueFlow, bagsThisRound, upstream, commonJsModuleRecords), collectionsThisRound, valueFlow));
414
+ return { parameters, facts: { returns: returnStage.returns, collections: collectionsThisRound, bags: bagsThisRound, valueFlow } };
415
+ };
416
+ /**
417
+ * What the CHECKER answers, at one line of the TRANSFORMED source.
418
+ *
419
+ * `GEA_TYPE_AT=<file substring>#<line>` prints every identifier and member
420
+ * access on that line with its type and the file:line of each declaration
421
+ * its symbol resolves to; `GEA_SRC_SPAN=<from>-<to>` beside it prints the
422
+ * transformed text itself.
423
+ *
424
+ * Both halves are load-bearing and neither is available anywhere else. The
425
+ * source transforms (`declaration-overlay-transform.ts`,
426
+ * `subclass-member-overlay-transform.ts`, `this-constructor-source-transform.ts`)
427
+ * REWRITE the text every census then reads, so a line number from a compass
428
+ * names a position in a file that exists only in memory, and the type at it
429
+ * is not the type the same line has on disk. The DECLARATION list is what
430
+ * turns a wrong type into a located defect: `Object3D.parent` reading back
431
+ * `boolean | undefined` says nothing until the symbol is seen resolving to
432
+ * `EventDispatcher.js`, at which point the whole class of defect
433
+ * (a synthesized field on a base shadowing every declarer's own `@type`) is
434
+ * visible at once. Two commits came out of exactly that.
435
+ */
436
+ if (process.env['GEA_TYPE_AT']) {
437
+ const [want, lineText] = String(process.env['GEA_TYPE_AT']).split('#');
438
+ const wantLine = Number(lineText);
439
+ for (const file of compiled.sourceFiles) {
440
+ if (!file.fileName.includes(String(want)))
441
+ continue;
442
+ if (process.env['GEA_SRC_SPAN']) {
443
+ const [a, b] = String(process.env['GEA_SRC_SPAN']).split('-').map(Number);
444
+ const lines = file.getFullText().split('\n');
445
+ for (let i = (a ?? 1) - 1; i < Math.min(b ?? 0, lines.length); i++)
446
+ process.stderr.write(`[SRC] ${i + 1}| ${lines[i]}\n`);
447
+ }
448
+ const visit = (node) => {
449
+ const line = file.getLineAndCharacterOfPosition(node.getStart()).line + 1;
450
+ if (line === wantLine && (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node))) {
451
+ const sym = compiled.checker.getSymbolAtLocation(node);
452
+ const decls = (sym?.declarations ?? [])
453
+ .map((d) => {
454
+ const f = d.getSourceFile();
455
+ return `${f.fileName.split('/').slice(-2).join('/')}:${f.getLineAndCharacterOfPosition(d.getStart()).line + 1}`;
456
+ })
457
+ .join(',');
458
+ process.stderr.write(`[TYPE] ${line} ${ts.SyntaxKind[node.kind]} ${node.getText().slice(0, 40)} :: ${compiled.checker.typeToString(compiled.checker.getTypeAtLocation(node))} @[${decls}]\n`);
459
+ }
460
+ ts.forEachChild(node, visit);
461
+ };
462
+ visit(file);
463
+ }
464
+ }
465
+ // A round is settled only when its actual input queries retain their answers.
466
+ // A stable count alone can hide changed carriers or a same-size swap of cells.
467
+ const settled = settleBindingCensus(compose);
468
+ timing.mark('binding-fixpoint');
469
+ if (process.env['GEA_ROUNDS_DEBUG'])
470
+ process.stderr.write(`[ROUNDS] ${settled.round} rounds, boundCount ${settled.parameters.boundCount}\n`);
471
+ const parameters = settled.parameters;
472
+ // Every one of these is the SETTLING round's own instance, which is what the
473
+ // snapshot exists to guarantee: the structural mapper below and the censuses
474
+ // that produced `parameters` are looking at the identical answers.
475
+ const { collections, bags, valueFlow } = settled.facts;
476
+ // The census belonging to the round `parameters` is, which is the one
477
+ // `types` (and therefore every `typeAt`) answers from.
478
+ const returns = settled.facts.returns;
479
+ const absent = censusAbsentGlobals(compiled.checker, compiled.sourceFiles, input.absentGlobals ?? new Set(), platformDeclarationTest(compiled.program), namespacePaths);
480
+ // Beside `argumentsObjects`, and for the identical reason: the reference
481
+ // producer publishes an unresolvable name's value and `citeExpressionResult`
482
+ // predicts it, so both must read one census rather than ask the checker
483
+ // twice. See `unresolvable-names.ts`.
484
+ const unresolvableNames = censusUnresolvableNames(compiled.checker, compiled.sourceFiles);
485
+ const identities = createIdentityTable(compiled.program, compiled.checker, specializations);
486
+ const prototypeReparentings = prototypeReparentingsOf(compiled.checker, identities, compiled.sourceFiles);
487
+ // Beside `absent` and `identities`, the two facts this rests on: which host
488
+ // globals are declared absent, and how to name the AST positions the answer
489
+ // covers. See `dead-typeof-guards.ts` for why this cannot be derived from
490
+ // any type -- a structural `never` here would collapse to the same id as a
491
+ // TypeScript inference's own `never`, so the proof has to come from the
492
+ // guard's own shape and the host's own statement instead.
493
+ const deadTypeofGuards = censusDeadTypeofGuards(compiled.sourceFiles, absent, identities);
494
+ // The array/collection census now runs INSIDE the fixpoint above (see
495
+ // `compose`'s own comment) rather than once more here over the settled
496
+ // parameter census. `settled.facts.collections` already IS the instance computed
497
+ // from round one's settled view and consulted by round two's own
498
+ // parameter/return/local/field censuses while they produced `parameters`
499
+ // -- reusing it rather than recomputing keeps the mapper and the fixpoint's
500
+ // own censuses looking at the identical answer for the identical question.
501
+ // On the three.js app it binds 10 collections and 40 empty array literals whose
502
+ // element type TypeScript inferred as `never`, same totals as the
503
+ // once-recomputed version -- the round-two view this reuses already had
504
+ // round one's settled parameter census as its own upstream, which is the
505
+ // same evidence a fresh recomputation over `parameters` would have added.
506
+ // Beside `collections`, and now on the same terms: the instance the LAST
507
+ // round of `compose` computed and handed to that round's own return and
508
+ // local censuses. An open property bag (`{}` filled a property at a time) is
509
+ // a storage position the checker types as the EMPTY object, so every write
510
+ // to it is a write the type does not have and every touch boxes. See
511
+ // `object-bag-bindings.ts`.
512
+ //
513
+ // Reusing rather than recomputing is the same two-authorities argument
514
+ // `collections` above states: a fresh census over the fully settled
515
+ // `parameters` would answer some nodes more precisely than the one those
516
+ // censuses actually consulted, and the mapper would then disagree with the
517
+ // view that produced the bindings it is mapping.
518
+ if (process.env['GEA_BINDING_DEBUG']) {
519
+ process.stderr.write(`[BINDINGS] bound=${parameters.boundCount} refusals=${JSON.stringify([...censusRefusalCounts(parameters.refusals)])}\n`);
520
+ process.stderr.write(parameters.debugReport?.() ?? '');
521
+ }
522
+ if (process.env['GEA_BAG_DEBUG']) {
523
+ process.stderr.write(`[BAG] bound=${bags.boundCount} refusals=${JSON.stringify([...censusRefusalCounts(bags.refusals)])}\n`);
524
+ process.stderr.write(bags.debugReport());
525
+ }
526
+ // The CENSUS half of `GEA_TYPE_AT`: what the settled binding census answers
527
+ // for the same nodes the checker half printed above. A store the emitter
528
+ // refuses names a carrier the checker's `[TYPE]` line does not show -- a
529
+ // `typeof`-narrowed `string` read that reaches the field as a number is a
530
+ // disagreement between these two lines, and only seeing both locates it.
531
+ if (process.env['GEA_TYPE_AT']) {
532
+ const [want, lineText] = String(process.env['GEA_TYPE_AT']).split('#');
533
+ const wantLine = Number(lineText);
534
+ for (const file of compiled.sourceFiles) {
535
+ if (!file.fileName.includes(String(want)))
536
+ continue;
537
+ const visit = (node) => {
538
+ const line = file.getLineAndCharacterOfPosition(node.getStart()).line + 1;
539
+ if (line === wantLine && (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isVariableDeclaration(node))) {
540
+ const answer = parameters.typeAt(node);
541
+ const stated = parameters.statedTypeAt(node);
542
+ const arms = parameters.unionArmsAt(node);
543
+ process.stderr.write(`[CENSUS] ${line} ${ts.SyntaxKind[node.kind]} ${node.getText().slice(0, 40)} :: ` +
544
+ `${answer ? compiled.checker.typeToString(answer) : '(null)'} stated=${stated ? compiled.checker.typeToString(stated) : '-'}` +
545
+ `${arms ? ` arms=[${arms.map((arm) => compiled.checker.typeToString(arm)).join(' | ')}]` : ''}\n`);
546
+ }
547
+ ts.forEachChild(node, visit);
548
+ };
549
+ visit(file);
550
+ }
551
+ }
552
+ // Before the mapper, which lays every family member out as the one layout
553
+ // this census names -- see `interface-families.ts`.
554
+ const interfaceFamilies = interfaceFamiliesOf(compiled.checker, identities, compiled.sourceFiles);
555
+ if (process.env['GEA_FAMILY_DEBUG']) {
556
+ for (const family of interfaceFamilies.families) {
557
+ process.stderr.write(`[FAMILY] ${family.key}: ${family.members.map((member) => member.name.text).join(' ')}\n`);
558
+ }
559
+ }
560
+ // Descriptor input facts become usable only after the existing mutation
561
+ // census seals this shared set. Its rawTypeAt input bypasses structural
562
+ // descriptor inference, so this introduces no inference cycle.
563
+ const globalHostMutationTaint = new HostMutationTaint();
564
+ let hostMutationFactsSealed = false;
565
+ const intrinsicPropertyContext = {
566
+ checker: compiled.checker,
567
+ identities,
568
+ isStandardLibraryDeclaration: (declaration) => compiled.program.isSourceFileDefaultLibrary(declaration.getSourceFile()),
569
+ globalHostMutationTaint
570
+ };
571
+ const types = createStructuralMapper(compiled.checker, identities, table, instantiations, specializations, parameters, absent, collections, bags, valueFlow, interfaceFamilies, commonJsModuleRecords, censusDeclaredMembers(compiled.checker, compiled.sourceFiles, identities, (body) => bodyReadsThis(body), reachable), (call) => hostMutationFactsSealed && intrinsicPropertyCallOf(intrinsicPropertyContext, call, call.expression) === 'getOwnPropertyDescriptor');
572
+ // The frontend's evidence-policy tables: built from the same
573
+ // `identities`/`valueFlow`/`reachable` the fixpoint above already settled,
574
+ // right after `types` exists so the agreement instrument can ask the
575
+ // mapper's own `typeAt`/`typeOf` for the SAME declarations while both are
576
+ // still in scope -- nowhere else in this function has both at once without
577
+ // recomputing one of them. Additive only: nothing here reads from or writes
578
+ // into `parameters`/`returns`/`collections`/`bags`, and nothing downstream
579
+ // reads `cellFacts` back, so this cannot change what any of those censuses,
580
+ // or `types` itself, answer.
581
+ const cellFacts = publishCellFacts(buildCellFactsTable(identities, valueFlow, compiled.sourceFiles, createCellPolicyRegistry(defaultCellEvidencePolicies(compiled.checker, reachable, bags.identity))), types,
582
+ // Only when asked -- see `cells/agreement.ts` for why an unasked `typeAt`
583
+ // renumbers the emitted C++.
584
+ Boolean(process.env['GEA_CELL_FACTS_AGREEMENT']));
585
+ if (process.env['GEA_CELL_FACTS_DEBUG']) {
586
+ process.stderr.write(`[CELLS] declarations=${cellFacts.table.all.length} twoOwner=${cellFacts.table.twoOwnerClaims.length} ` +
587
+ `refusals=${cellFacts.table.refusals.length} agreement=${JSON.stringify(cellFacts.agreement)}\n`);
588
+ }
589
+ // The STRUCTURAL half of `GEA_TYPE_AT`: the mapper's own answer, which is
590
+ // what every producer publishes -- a `[CENSUS]` union-arms line and a
591
+ // `[STRUCT]` line that disagree locate a reduction between the two.
592
+ if (process.env['GEA_TYPE_AT']) {
593
+ const [want, lineText] = String(process.env['GEA_TYPE_AT']).split('#');
594
+ const wantLine = Number(lineText);
595
+ for (const file of compiled.sourceFiles) {
596
+ if (!file.fileName.includes(String(want)))
597
+ continue;
598
+ const visit = (node) => {
599
+ const line = file.getLineAndCharacterOfPosition(node.getStart()).line + 1;
600
+ if (line === wantLine && (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node))) {
601
+ let shape = '(throws)';
602
+ try {
603
+ shape = structuralShapeKey(table.get(types.typeAt(node)).shape);
604
+ }
605
+ catch { }
606
+ process.stderr.write(`[STRUCT] ${line} ${ts.SyntaxKind[node.kind]} ${node.getText().slice(0, 40)} :: ${shape.slice(0, 600)}\n`);
607
+ }
608
+ ts.forEachChild(node, visit);
609
+ };
610
+ visit(file);
611
+ }
612
+ }
613
+ const prototypeFallback = input.dynamicFallback
614
+ ? prototypeMutatedConstructorTypes(compiled.sourceFiles, compiled.checker, types, identities)
615
+ : { types: new Set(), callables: new Set() };
616
+ const dynamicFallbackTypes = input.dynamicFallback
617
+ ? new Set([...proxyFallbackTypes(compiled.sourceFiles, compiled.checker, types), ...prototypeFallback.types])
618
+ : new Set();
619
+ const dynamicWrittenTypes = anyKeyedWriteTypes(compiled.sourceFiles, compiled.checker, types);
620
+ const census = censusProgram(compiled.sourceFiles, identities, reachable, specializations, namespacePaths);
621
+ // Before normalization, not after: the table seals when the graph does, and a
622
+ // census that interns a type it is the first to ask about would be asking a
623
+ // sealed table to grow. The types are the same either way -- interning is
624
+ // idempotent and the element producer asks for exactly these -- so the only
625
+ // thing the order decides is whether this runs against a table that can still
626
+ // answer.
627
+ //
628
+ // Also before `context` is built (not after, as this used to run): a
629
+ // producer -- `calleeAwareTypeAt`, `producers/shared.ts` -- reads this same
630
+ // census through `context.hostProtocols` to tell whether a call's callee is
631
+ // a bound declaration before deciding whether to read back the checker's
632
+ // resolved-signature type or the plain one, so the map has to already exist
633
+ // (even if still empty) when the `context` object below captures a
634
+ // reference to it. Population still happens right after, and because
635
+ // `context.hostProtocols` holds the SAME map instance -- never a copy --
636
+ // every producer sees it fully populated by the time `normalizeProgram`
637
+ // actually calls any of them.
638
+ const hosts = {
639
+ protocols: new Map(),
640
+ externals: new Map(),
641
+ externalFiles: new Map(),
642
+ namespaceRoots: new Map(),
643
+ standardLibrary: new Set(),
644
+ commonJsBindings: new Map(),
645
+ commonJsProvenanceFailures: new Set(),
646
+ hostSingletonBindings: new Set(),
647
+ hostNamespaceBindings: new Set()
648
+ };
649
+ // Resolved before `context` is built, unlike the two host censuses above:
650
+ // this one is a pure name lookup with no walk to populate it, so it can be
651
+ // complete up front rather than shared-by-reference and filled in after.
652
+ // One authority, two readers -- `derive.ts`'s carrier policy (through
653
+ // `compiler.ts`) and the iteration producers below, which have to agree
654
+ // about which sources take the native-cursor path.
655
+ const keyedCollections = keyedCollectionDeclarationsOf(compiled.checker, identities, compiled.sourceFiles);
656
+ // The same shape of fact as `keyedCollections`, with the same two readers
657
+ // that must agree: `derive.ts`'s `GeneratorDeclarationPolicy` (through
658
+ // `compiler.ts`) decides that a `Generator<T, ...>` IS the cursor carrier,
659
+ // and `producers/shared.ts`'s `isNativeIterableGeneratorType` decides that a
660
+ // `for`-`of` over one skips the `@@iterator` lookup. Resolving it twice would
661
+ // let one side take the fast path for a declaration the other did not
662
+ // recognise.
663
+ const generatorDeclarationEarly = generatorDeclarationOf(compiled.checker, identities, compiled.sourceFiles);
664
+ const asyncGeneratorDeclarationEarly = asyncGeneratorDeclarationOf(compiled.checker, identities, compiled.sourceFiles);
665
+ const mapIteratorDeclarationEarly = mapIteratorDeclarationOf(compiled.checker, identities, compiled.sourceFiles);
666
+ const standardBuffers = standardBufferDeclarationsOf(compiled.checker, identities, compiled.sourceFiles);
667
+ const wellKnownSymbols = wellKnownSymbolDeclarationsOf(compiled.checker, identities, compiled.sourceFiles);
668
+ // A computed write key narrowed to a proven finite set -- three's
669
+ // `this[ key ] = newValue` in `Material.setValues`/`Texture.setValues`. Built
670
+ // once and shared by BOTH readers that must agree it proves the same thing:
671
+ // the global-host-mutation census below (which narrows a WRITE's taint) and
672
+ // `computedKeyTextsOf` a few lines down (which narrows a `get`/`set`
673
+ // operation's REFLECTION demand, `ir/reflection-demand.ts`).
674
+ // `GEA_HOST_CENSUS_KEY_SETS_OFF` keeps every computed key unknown for both.
675
+ const computedKeysOf = process.env['GEA_HOST_CENSUS_KEY_SETS_OFF']
676
+ ? undefined
677
+ : createCensusComputedKeysOf(compiled.checker, valueFlow, closedCallableAuthorityOf(compiled.checker, valueFlow, (expression) => types.rawTypeAt(expression), (declaration) => argumentsObjects.usesByOwner.get(declaration)));
678
+ // `Object.prototype`'s own declaration identity, resolved once: the anchor
679
+ // `computedKeyTextsOf` below checks the for-in arm's "Object.prototype
680
+ // carries no enumerable key" assumption against -- the same identity
681
+ // `global-host-mutations.ts`'s own `objectPrototypeKeysOf` resolves.
682
+ const objectPrototypeDeclaration = (() => {
683
+ const anchor = compiled.sourceFiles[0];
684
+ const objectSymbol = anchor ? compiled.checker.resolveName('Object', anchor, ts.SymbolFlags.Value, false) : undefined;
685
+ const prototype = objectSymbol && anchor ? compiled.checker.getTypeOfSymbolAtLocation(objectSymbol, anchor).getProperty('prototype') : undefined;
686
+ return prototype ? identities.symbolDeclarationId(prototype) : null;
687
+ })();
688
+ // Memoized by node identity: this is a whole-program proof
689
+ // (`computed-key-set.ts`), and `keyOf` in `producers/properties.ts` asks
690
+ // this hook once per element-access candidate across every specialization
691
+ // copy that reaches it -- an unmemoized re-proof per copy is exactly the
692
+ // mistake that once turned a 32s compile into 746s (see
693
+ // `geatsc-escape-proof-needs-memoized-predicates` in project memory).
694
+ const provenKeyTextsCache = new Map();
695
+ /**
696
+ * `ProducerContext.computedKeyTextsOf` -- see that field's own comment for
697
+ * the contract. `computedKeysOf` above proves a TENTATIVE key set under
698
+ * intrinsic assumptions it cannot discharge by itself
699
+ * (`createCensusComputedKeysOf`'s own header explains why); this is what
700
+ * actually discharges them, against the FINAL sealed
701
+ * `globalHostMutationTaint` -- never the mid-fixed-point state the mutation
702
+ * census below iterates through on its way there. Guarded on
703
+ * `hostMutationFactsSealed` (false until the call below completes) so a
704
+ * caller that somehow reached this before sealing gets the same "not
705
+ * proven" answer a refused proof gives, never a stale one built on an
706
+ * incomplete census.
707
+ */
708
+ const computedKeyTextsOf = (key) => {
709
+ if (!hostMutationFactsSealed)
710
+ return null;
711
+ const cached = provenKeyTextsCache.get(key);
712
+ if (cached !== undefined)
713
+ return cached;
714
+ const compute = () => {
715
+ if (!computedKeysOf)
716
+ return null;
717
+ const answer = computedKeysOf(key);
718
+ if (!answer)
719
+ return null;
720
+ // Whatever the proof leaned on `Object.keys`/the Array iteration
721
+ // protocol staying intact: checked against the sealed census exactly as
722
+ // `censusGlobalHostMutations`'s own final check does (see that file's
723
+ // `assumptionFailed`), never assumed because the proof assumed it.
724
+ if (answer.requirements.length > 0 && failedIntrinsicProtocolRequirements(intrinsicPropertyContext, answer.requirements).length > 0) {
725
+ return null;
726
+ }
727
+ const keys = new Set(answer.keys);
728
+ if (answer.inheritsObjectPrototypeKeys) {
729
+ const surface = globalHostMutationTaint.surfaceKeys;
730
+ // `every`/`numeric` on the surface or on Object.prototype's own
731
+ // record means the for-in arm's "Object.prototype carries no
732
+ // enumerable key" assumption did NOT survive: some write this
733
+ // program made could put any name (or an unbounded numeric one) on
734
+ // Object.prototype -- exactly the "may have grown an arbitrary
735
+ // property" case this whole mechanism exists to rule out. Refuse
736
+ // rather than publish a set the language does not actually bound.
737
+ if (globalHostMutationTaint.has('*') || surface.every || surface.numeric)
738
+ return null;
739
+ const own = objectPrototypeDeclaration === null ? undefined : globalHostMutationTaint.keysOf(objectPrototypeDeclaration);
740
+ if (own?.every || own?.numeric)
741
+ return null;
742
+ for (const name of surface.names)
743
+ keys.add(name);
744
+ for (const name of own?.names ?? [])
745
+ keys.add(name);
746
+ }
747
+ return [...keys];
748
+ };
749
+ const result = compute();
750
+ provenKeyTextsCache.set(key, result);
751
+ return result;
752
+ };
753
+ const context = {
754
+ isStandardLibraryDeclaration: (declaration) => compiled.program.isSourceFileDefaultLibrary(declaration.getSourceFile()),
755
+ hostMethodOf: (node) => resolveHostMethod(compiled.checker, hostMethodBindings, node),
756
+ computedKeyTextsOf,
757
+ numericIndexAbsenceProvenAt: (receiver, key) => {
758
+ if (!hostMutationFactsSealed)
759
+ return false;
760
+ const proof = intrinsicProtocols.capture(() => numericIndexAbsenceProven(compiled.checker, valueFlow, compiled.checker.getNonNullableType(types.rawTypeAt(receiver)), types.rawTypeAt(key)));
761
+ // Inference records provisional obligations; operation production runs
762
+ // after the shared mutation census has sealed and discharges them now.
763
+ return proof.value && failedIntrinsicProtocolRequirements(intrinsicPropertyContext, proof.requirements).length === 0;
764
+ },
765
+ closedLiteralMemberAbsenceProvenAt: (receiver, name) => {
766
+ if (!hostMutationFactsSealed)
767
+ return false;
768
+ const proof = intrinsicProtocols.capture(() => closedLiteralMemberAbsenceProven(compiled.checker, valueFlow, compiled.checker.getNonNullableType(types.rawTypeAt(receiver)), name, receiver));
769
+ // Same rule as `numericIndexAbsenceProvenAt`: the proof is provisional
770
+ // until the shared mutation census seals, and is discharged against it
771
+ // here rather than assumed from its own inference-time capture.
772
+ return proof.value && failedIntrinsicProtocolRequirements(intrinsicPropertyContext, proof.requirements).length === 0;
773
+ },
774
+ checker: compiled.checker,
775
+ identities,
776
+ types,
777
+ // Read from the build. Every module setting except `None`/`CommonJS`
778
+ // compiles ES modules, and an ES module is strict whole -- so this is a
779
+ // fact about the build, not about any one file's syntax.
780
+ buildIsStrict,
781
+ table,
782
+ ordinals: createOrdinalCounter(),
783
+ evaluationOrdinals: createEvaluationOrdinals(),
784
+ // Overridden per candidate below (`path: candidate.specialization`) --
785
+ // `rootSpecialization` here is only to satisfy the type on this shared
786
+ // base object, which is never read from directly as a producer context.
787
+ path: rootSpecialization,
788
+ specializations,
789
+ hostProtocols: hosts.protocols,
790
+ hostSingletonBindings: hosts.hostSingletonBindings,
791
+ hostNamespaceBindings: hosts.hostNamespaceBindings,
792
+ globalHostMutationTaint,
793
+ prototypeReparentings,
794
+ dynamicFallbackTypes,
795
+ commonJsBindings: hosts.commonJsBindings,
796
+ commonJsProvenanceFailures: hosts.commonJsProvenanceFailures,
797
+ commonJsRequire: createCommonJsRequireCensus(compiled.checker, compiled.program.getSourceFiles(), input.commonJsGlobals ?? new Map()),
798
+ commonJsModuleRecords,
799
+ builtinModuleNameOf: (specifier) => input.commonJsBuiltinModules?.get(specifier) ?? null,
800
+ builtinModuleSourceOf: (name) => input.commonJsBuiltinModuleSources?.get(name) ?? null,
801
+ runtimeModuleTargetOf: compiled.runtimeModuleTargetOf,
802
+ sourceFileOf: compiled.sourceFileOf,
803
+ absentGlobals: absent,
804
+ argumentsObjects,
805
+ unresolvableNames,
806
+ reassignedBindings: createReassignedBindingCensus(compiled.checker, valueFlow),
807
+ namespacePaths,
808
+ keyedCollections,
809
+ collections,
810
+ bags,
811
+ parameters,
812
+ generatorDeclaration: generatorDeclarationEarly,
813
+ asyncGeneratorDeclaration: asyncGeneratorDeclarationEarly,
814
+ mapIteratorDeclaration: mapIteratorDeclarationEarly,
815
+ ...(returns ? { returns } : {})
816
+ };
817
+ const hostInput = {
818
+ checker: compiled.checker,
819
+ identities,
820
+ files: compiled.sourceFiles,
821
+ census: census.candidates,
822
+ types,
823
+ table,
824
+ nativeTypes: input.nativeTypes ?? new Map(),
825
+ nativeTypesByDeclaration: input.nativeTypesByDeclaration ?? new Map(),
826
+ hostSingletonDeclarations: input.hostSingletonDeclarations ?? new Map(),
827
+ hostNamespaceRoots: input.hostNamespaceRoots ?? new Set(),
828
+ hostNamespaceRootDeclarations: input.hostNamespaceRootDeclarations ?? [],
829
+ hostNamespacePaths: input.hostNamespacePaths ?? new Set(),
830
+ hostNamespaceRootTypes: input.hostNamespaceRootTypes ?? new Map(),
831
+ commonJsGlobals: input.commonJsGlobals ?? new Map(),
832
+ commonJsDeclarationFiles: [
833
+ ...new Set([...(input.commonJsGlobals ?? new Map()).values()].flatMap((entry) => {
834
+ const file = compiled.sourceFileOf(entry.declarationFileName);
835
+ return file ? [file] : [];
836
+ }))
837
+ ],
838
+ namespacePaths,
839
+ isIntrinsicGlobalThis: unresolvableNames.isIntrinsicGlobalThis
840
+ };
841
+ const typedArrayElements = new Map();
842
+ hostProtocolBindings(hostInput, hosts);
843
+ ambientHostBindings(hostInput, hosts, typedArrayElements);
844
+ // The nine typed-array INSTANCE interfaces, resolved by name and unioned
845
+ // over whatever the seed walk above already found. Unconditional, because a
846
+ // program can hold a typed array without ever naming one -- see
847
+ // `typedArrayDeclarationsOf`. The two agree wherever both answer; this one
848
+ // also answers where the walk has no seed.
849
+ for (const [declaration, domain] of typedArrayDeclarationsOf(compiled.checker, identities, compiled.sourceFiles, compiled.program, input.hostTypedArrayDeclarations ?? [])) {
850
+ typedArrayElements.set(declaration, domain);
851
+ }
852
+ // After the ambient census, deliberately: a standard-library class the
853
+ // census already bound weakly (as a structural body, or as a protocol with
854
+ // no carrier) must end up on the backend's own carrier, not beside it. See
855
+ // `bindStandardClasses`.
856
+ bindStandardClasses(hostInput, hosts, input.standardClasses ?? new Set());
857
+ const hostGlobalBindings = new Set([...hosts.hostSingletonBindings, ...hosts.hostNamespaceBindings]);
858
+ // The mutation census must see the exact identities whose representation
859
+ // policy carries them outside `globalThis`: typed-array instances and native
860
+ // host handles. Passing identities, rather than spelling names in the
861
+ // census, keeps a caller declaration or merged ambient symbol from acquiring
862
+ // this proof.
863
+ const nativeReceiverDeclarations = new Set(typedArrayElements.keys());
864
+ for (const [declaration, binding] of hosts.protocols)
865
+ if (binding.native !== null)
866
+ nativeReceiverDeclarations.add(declaration);
867
+ const nativeReceiverSymbols = new Set();
868
+ const nativeConstructorSymbols = new Set();
869
+ // `bindStandardClasses` publishes the carrier policy, while the mutation
870
+ // census needs the checker's instance identity at each call result. Resolve
871
+ // that identity again from the policy's own names so an unmentioned class is
872
+ // still proven (and a caller declaration with the same spelling is not).
873
+ const receiverAnchor = compiled.sourceFiles[0];
874
+ if (receiverAnchor) {
875
+ for (const name of [...typedArrayInstanceInterfaceNames, ...(input.standardClasses ?? [])]) {
876
+ const symbol = compiled.checker.resolveName(name, receiverAnchor, ts.SymbolFlags.Interface, false);
877
+ const typedArray = typedArrayInstanceInterfaceNames.includes(name);
878
+ if (!symbol ||
879
+ (!typedArray &&
880
+ (!symbol.declarations?.length || !symbol.declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib)))) {
881
+ continue;
882
+ }
883
+ nativeReceiverSymbols.add(symbol);
884
+ const declaration = identities.symbolDeclarationId(symbol, receiverAnchor);
885
+ if (declaration)
886
+ nativeReceiverDeclarations.add(declaration);
887
+ }
888
+ }
889
+ const standardClassNames = input.standardClasses ?? new Set();
890
+ const admitNativeConstructor = (constructor, location) => {
891
+ const valueDeclaration = constructor?.valueDeclaration;
892
+ if (!constructor || !valueDeclaration || !isAmbientDeclaration(valueDeclaration))
893
+ return;
894
+ nativeConstructorSymbols.add(constructor);
895
+ const constructorType = compiled.checker.getTypeOfSymbolAtLocation(constructor, location);
896
+ for (const signature of compiled.checker.getSignaturesOfType(constructorType, ts.SignatureKind.Construct)) {
897
+ const result = compiled.checker.getReturnTypeOfSignature(signature);
898
+ const symbol = result.aliasSymbol ?? result.getSymbol();
899
+ if (!symbol)
900
+ continue;
901
+ nativeReceiverSymbols.add(symbol);
902
+ const declaration = identities.symbolDeclarationId(symbol, location);
903
+ if (declaration)
904
+ nativeReceiverDeclarations.add(declaration);
905
+ }
906
+ };
907
+ const executableSourceFiles = new Set(compiled.sourceFiles);
908
+ for (const file of compiled.program.getSourceFiles()) {
909
+ if (executableSourceFiles.has(file)) {
910
+ for (const name of standardClassNames) {
911
+ admitNativeConstructor(compiled.checker.resolveName(name, file, ts.SymbolFlags.Value, false), file);
912
+ }
913
+ }
914
+ const visitNativeConstructorDeclaration = (node) => {
915
+ // A declaration-bound host class states its constructor identity as
916
+ // well as its instance carrier. Reading only standardClasses here left
917
+ // `new HostView()` opaque even though hosts.protocols had already sealed
918
+ // that very class as native. Do not admit a structurally compatible
919
+ // constructor signature: the ambient class declaration must be the one
920
+ // the host bound.
921
+ if (ts.isClassDeclaration(node) && node.name && isAmbientDeclaration(node)) {
922
+ const symbol = compiled.checker.getSymbolAtLocation(node.name);
923
+ const declaration = symbol ? identities.symbolDeclarationId(symbol, node.name) : null;
924
+ const binding = declaration === null ? undefined : hosts.protocols.get(declaration);
925
+ if (binding && binding.native !== null)
926
+ admitNativeConstructor(symbol, node.name);
927
+ }
928
+ if (executableSourceFiles.has(file) &&
929
+ ts.isVariableDeclaration(node) &&
930
+ ts.isIdentifier(node.name) &&
931
+ standardClassNames.has(node.name.text) &&
932
+ isAmbientDeclaration(node)) {
933
+ admitNativeConstructor(compiled.checker.getSymbolAtLocation(node.name), node.name);
934
+ }
935
+ ts.forEachChild(node, visitNativeConstructorDeclaration);
936
+ };
937
+ visitNativeConstructorDeclaration(file);
938
+ }
939
+ // `absorb`, not a copy of the set: the census's per-key facts are not in
940
+ // its legacy set view, and dropping them would lose writes.
941
+ globalHostMutationTaint.absorb(censusGlobalHostMutations(compiled.checker, identities, compiled.sourceFiles, unresolvableNames, hostGlobalBindings, valueFlow, reachable, nativeReceiverDeclarations, nativeReceiverSymbols, nativeConstructorSymbols, types.rawTypeAt, compiled.program.getSourceFiles().filter((file) => file.isDeclarationFile),
942
+ // The one shared instance built above, alongside `computedKeyTextsOf` --
943
+ // `GEA_HOST_CENSUS_KEY_SETS_OFF` keeps every computed key unknown for
944
+ // both readers.
945
+ computedKeysOf));
946
+ hostMutationFactsSealed = true;
947
+ const failedIntrinsicRequirements = failedIntrinsicProtocolRequirements(intrinsicPropertyContext, intrinsicProtocols.requirements());
948
+ // `GEA_LEDGER_DEBUG=1` pairs with the publish-time `[LEDGER]` lines
949
+ // `createDeferredIntrinsicProtocolLedger`'s `replace` prints for every scope:
950
+ // those name WHERE an obligation was raised, and this names WHY the final
951
+ // sealed census refused each one that is still standing at this, the only
952
+ // point the compiler itself asks -- the same `failedIntrinsicProtocolRequirements`
953
+ // call the certification gate uses, so nothing here can disagree with the
954
+ // real answer; it only narrates it.
955
+ if (process.env['GEA_LEDGER_DEBUG'] !== undefined) {
956
+ const clauses = new Map();
957
+ for (const requirement of failedIntrinsicRequirements) {
958
+ const query = requirement.member !== undefined ? 'all' : (requirement.prototypeKeys ?? 'all');
959
+ const why = requirement.member !== undefined
960
+ ? intrinsicPropertyContext.globalHostMutationTaint.has('*')
961
+ ? '*'
962
+ : 'member'
963
+ : explainIntrinsicProtocolFailure(intrinsicPropertyContext, requirement.intrinsic, requirement.location, query);
964
+ clauses.set(why, (clauses.get(why) ?? 0) + 1);
965
+ const file = requirement.location.getSourceFile();
966
+ const line = file.getLineAndCharacterOfPosition(requirement.location.getStart(file)).line + 1;
967
+ console.error(`[LEDGER-FAILED] ${requirement.intrinsic}${requirement.member !== undefined ? `.${requirement.member}` : ''} ${intrinsicProtocolRequirementKind(requirement) ?? 'whole'} why=${why} ${file.fileName.split('/').pop()}:${line}`);
968
+ }
969
+ console.error(`[LEDGER-SUMMARY] failed=${failedIntrinsicRequirements.length} clauses=${[...clauses].map(([clause, count]) => `${clause}:${count}`).join(',')}`);
970
+ }
971
+ const intrinsicProtocolDiagnostics = failedIntrinsicRequirements.map((requirement, ordinal) => {
972
+ const file = requirement.location.getSourceFile();
973
+ const position = file.getLineAndCharacterOfPosition(requirement.location.getStart(file));
974
+ return {
975
+ id: `intrinsic-protocol/${requirement.intrinsic}/${ordinal}`,
976
+ component: checkerComponent,
977
+ operation: null,
978
+ missingPrimitive: null,
979
+ // Names the exact obligation: a per-key requirement fails only when the
980
+ // census recorded one of those keys, a whole-prototype one under any
981
+ // unattributed key write at all -- which of the two is what to fix.
982
+ message: `Inferred callable closure requires the intrinsic ${requirement.intrinsic}${requirement.member === undefined
983
+ ? requirement.prototypeKeys
984
+ ? ` prototype keys [${prototypeKeyQuerySignature(requirement.prototypeKeys)}]`
985
+ : ' prototype (whole)'
986
+ : `.${requirement.member}`} to remain intact; the final host mutation census did not prove that requirement.`,
987
+ location: { file: file.fileName, line: position.line + 1, column: position.character + 1 }
988
+ };
989
+ });
990
+ const promiseDeclaration = promiseDeclarationOf(compiled.checker, identities, compiled.sourceFiles);
991
+ const dateDeclaration = dateDeclarationOf(compiled.checker, identities, compiled.sourceFiles);
992
+ const stringObjectDeclaration = stringObjectDeclarationOf(compiled.checker, identities, compiled.sourceFiles);
993
+ const errorDeclarations = errorDeclarationsOf(compiled.checker, identities, compiled.sourceFiles);
994
+ const functionDeclaration = functionDeclarationOf(compiled.checker, identities, compiled.sourceFiles);
995
+ const classHeritage = classHeritageOf(compiled.checker, identities, compiled.sourceFiles, prototypeReparentings.baseOf);
996
+ const constructorSlotSubclasses = constructorSlotSubclassesOf(compiled.checker, identities, compiled.sourceFiles, classHeritage);
997
+ const uninstantiableClasses = uninstantiableClassesOf(compiled.checker, identities, compiled.sourceFiles);
998
+ const interfaceImplementors = interfaceImplementorsOf(compiled.checker, identities, compiled.sourceFiles);
999
+ const generatorDeclaration = generatorDeclarationEarly;
1000
+ const asyncGeneratorDeclaration = asyncGeneratorDeclarationEarly;
1001
+ const mapIteratorDeclaration = mapIteratorDeclarationEarly;
1002
+ // Resolved the same way and for the same reason as `keyedCollections` above.
1003
+ const regexpDeclarations = regexpDeclarationsOf(compiled.checker, identities, compiled.sourceFiles);
1004
+ timing.mark('structural-and-host-censuses');
1005
+ const normalized = normalizeProgram({
1006
+ census,
1007
+ types: table,
1008
+ // One producer set per monomorphized copy, differing only in which mapper
1009
+ // view they ask. Everything else -- the checker, the identity table, both
1010
+ // ordinal counters -- is the one shared context, because those answer
1011
+ // whole-program questions that a copy must not fork.
1012
+ producers: (candidate) => input.producers({
1013
+ ...context,
1014
+ identities: identities.forSpecialization(candidate.specialization),
1015
+ types: types.forSpecialization(candidate.specialization),
1016
+ path: candidate.specialization
1017
+ }),
1018
+ // Which copy a candidate belongs to, owner included -- the identity table's
1019
+ // own answer, so the producer cache, the identity views and the structural
1020
+ // mappers all agree on what "the same copy" means.
1021
+ copyKey: (candidate) => identities.copyKeyOf(candidate.specialization),
1022
+ gates: (operations) => gatingEdges({
1023
+ files: compiled.sourceFiles,
1024
+ identities,
1025
+ operations,
1026
+ reachable,
1027
+ specializations,
1028
+ argumentsObjects,
1029
+ unresolvableNames,
1030
+ namespacePaths
1031
+ })
1032
+ });
1033
+ timing.mark('normalization');
1034
+ timing.report();
1035
+ // See `FrontendResult.locationOfNode`. Lazy, because a compilation that
1036
+ // reports nothing must not pay for a whole-program walk to name nodes
1037
+ // nobody asked about.
1038
+ //
1039
+ // Keyed by `positionKeyOfNode` -- file and ordinal, kind and monomorphization
1040
+ // suffix both dropped -- rather than by the raw NodeId text. A monomorphized
1041
+ // copy has no source text of its own (the position key already names the
1042
+ // root it was cut from, so no separate `withoutSpecialization` fallback
1043
+ // lookup is needed), and dropping kind is what lets `locationOfDeclaration`
1044
+ // resolve a DeclarationId -- which never carries one -- through this SAME
1045
+ // index instead of a second one built to answer the identical question in a
1046
+ // different identity currency.
1047
+ let nodesByPosition = null;
1048
+ const positionIndex = () => {
1049
+ if (nodesByPosition === null) {
1050
+ const index = new Map();
1051
+ for (const file of compiled.sourceFiles) {
1052
+ if (file.isDeclarationFile)
1053
+ continue;
1054
+ const walk = (current) => {
1055
+ let key = null;
1056
+ try {
1057
+ key = positionKeyOfNode(identities.nodeIdOf(current));
1058
+ }
1059
+ catch {
1060
+ key = null;
1061
+ }
1062
+ if (key !== null && !index.has(key))
1063
+ index.set(key, current);
1064
+ ts.forEachChild(current, walk);
1065
+ };
1066
+ walk(file);
1067
+ }
1068
+ nodesByPosition = index;
1069
+ }
1070
+ return nodesByPosition;
1071
+ };
1072
+ const sourceNodeOf = (node) => positionIndex().get(positionKeyOfNode(node)) ?? null;
1073
+ const sourceNodeOfDeclaration = (declaration) => positionIndex().get(positionKeyOfDeclaration(declaration)) ?? null;
1074
+ const locationOfFound = (found) => {
1075
+ if (!found)
1076
+ return null;
1077
+ const file = found.getSourceFile();
1078
+ const { line, character } = file.getLineAndCharacterOfPosition(found.getStart());
1079
+ return { file: file.fileName, line: line + 1, column: character + 1 };
1080
+ };
1081
+ const locationOfNode = (node) => locationOfFound(sourceNodeOf(node));
1082
+ const textOfNode = (node) => sourceNodeOf(node)?.getText() ?? null;
1083
+ /** `locationOfNode`'s twin for a DeclarationId -- see `FrontendResult.locationOfDeclaration`. */
1084
+ const locationOfDeclaration = (declaration) => locationOfFound(sourceNodeOfDeclaration(declaration));
1085
+ return {
1086
+ dynamicFallbackTypes,
1087
+ dynamicWrittenTypes,
1088
+ dynamicFallbackCallables: prototypeFallback.callables,
1089
+ graph: normalized.graph,
1090
+ sourcePreparations: compiled.sourcePreparations,
1091
+ hostProtocols: hosts.protocols,
1092
+ wellKnownSymbols,
1093
+ externalBindings: hosts.externals,
1094
+ commonJsBindings: hosts.commonJsBindings,
1095
+ hostSingletonBindings: hosts.hostSingletonBindings,
1096
+ hostNamespaceBindings: hosts.hostNamespaceBindings,
1097
+ absentBindings: absentBindingIds(absent, identities),
1098
+ deadTypeofGuards,
1099
+ locationOfNode,
1100
+ locationOfDeclaration,
1101
+ textOfNode,
1102
+ externalBindingFiles: hosts.externalFiles,
1103
+ standardLibraryBindings: hosts.standardLibrary,
1104
+ // The module bodies the graph actually has, in evaluation order. A file the
1105
+ // reachability walk pruned whole, or one whose top level censused nothing,
1106
+ // has no region -- and a name in this list that no region answers would be
1107
+ // a call to a function nothing defines.
1108
+ moduleOrder: moduleEvaluationOrder({ checker: compiled.checker, files: compiled.sourceFiles, entries: compiled.entryFiles })
1109
+ .map((file) => regionId(identities.nodeIdOf(file), 'module-body'))
1110
+ .filter((region) => normalized.graph.regions.has(region)),
1111
+ sourceFileNames: identities.sourceFileNames,
1112
+ typedArrayElements,
1113
+ promiseDeclaration,
1114
+ dateDeclaration,
1115
+ stringObjectDeclaration,
1116
+ errorDeclarations,
1117
+ functionDeclaration,
1118
+ classHeritage,
1119
+ constructorSlotSubclasses,
1120
+ uninstantiableClasses,
1121
+ interfaceImplementors,
1122
+ generatorDeclaration,
1123
+ asyncGeneratorDeclaration,
1124
+ mapIteratorDeclaration,
1125
+ keyedCollections,
1126
+ regexpDeclarations,
1127
+ standardBuffers,
1128
+ hostNamespaceRoots: hosts.namespaceRoots,
1129
+ checkerDiagnostics: (() => {
1130
+ const compiledFiles = new Set(compiled.sourceFiles);
1131
+ const syntactic = new Set(compiled.program.getSyntacticDiagnostics());
1132
+ return compiled.diagnostics
1133
+ .filter((diagnostic) => !diagnosticIsInPrunedCode(diagnostic, reachable, compiledFiles, syntactic))
1134
+ .map(translateDiagnostic);
1135
+ })(),
1136
+ intrinsicProtocolDiagnostics,
1137
+ uninstalledFamilies: normalized.uninstalledFamilies,
1138
+ // `parameters` is the COMPOSED census: `composeReturnBindings`,
1139
+ // `withLocalBindings`, `withFieldBindings` and `withJsDocTypeNames` each
1140
+ // concatenate their own refusals onto their upstream's, so this one list
1141
+ // already carries five censuses. The old string prefixes (`return:`,
1142
+ // `local:`, `field:`) are gone -- a `CensusRefusal`'s key is namespaced by
1143
+ // its domain already, and a prefix applied by the WRAPPER was the layer
1144
+ // above naming a refusal the layer below had raised.
1145
+ // `collections` and `bags` are not in that chain and keep their own.
1146
+ censusAccounting: new Map([
1147
+ ['bindings', { bound: parameters.boundCount, refusals: censusRefusalCounts(parameters.refusals) }],
1148
+ ['collections', { bound: collections.boundCount, refusals: censusRefusalCounts(collections.refusals) }],
1149
+ ['bags', { bound: bags.boundCount, refusals: censusRefusalCounts(bags.refusals) }]
1150
+ ]),
1151
+ censusRefusals: [...parameters.refusals, ...collections.refusals, ...bags.refusals],
1152
+ cellFacts,
1153
+ structuralDisagreements: types.structuralDisagreements,
1154
+ structuralFormViolations: types.structuralFormViolations,
1155
+ classCopies: types.classCopies()
1156
+ };
1157
+ };