@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,279 @@
1
+ import ts from 'typescript';
2
+ import { semanticResultId } from '../../../identity/ids.js';
3
+ import { normalCompletion, pureEffects } from '../../model/operands.js';
4
+ import { declaredClosedTupleRestElementsOf } from '../parameter-slot.js';
5
+ import { resolveExpressionOperand } from './boundary.js';
6
+ import { mintOperationId, mintResult, operand } from './mint.js';
7
+ import { resultEdge } from './shared.js';
8
+ /**
9
+ * The per-position types of a tuple whose arity is closed, or `null` for
10
+ * anything else.
11
+ *
12
+ * `optional`/`rest`/`variadic` elements are each a reason the arity is NOT
13
+ * settled -- `[number, ...string[]]` has no compile-time length, and
14
+ * `[number, string?]` has two possible ones -- so a tuple carrying any of them
15
+ * is not admitted here and falls through to whatever its caller's general path
16
+ * is. This is the same closed-arity requirement `lowerTupleLiteral`'s own
17
+ * `layout.length !== operands.length` check enforces one layer down, asked
18
+ * before the operands are built rather than after.
19
+ */
20
+ export const closedTupleElementTypesOf = (context, type) => {
21
+ const shape = context.table.get(type).shape;
22
+ if (shape.kind !== 'tuple')
23
+ return null;
24
+ if (shape.elements.some((element) => element.optional || element.rest || element.variadic))
25
+ return null;
26
+ return shape.elements.map((element) => element.type);
27
+ };
28
+ /**
29
+ * An OPEN-ENDED tuple a spread can still settle positionally: `k` required
30
+ * positions followed by exactly one `rest` element and nothing after it --
31
+ * `[DiagnosticMessage, ...DiagnosticArguments]`. The fixed positions expand
32
+ * to `[[Get]]`s like a closed tuple's (`mintPositionalSpreadReads`), and the
33
+ * tail is a range copy from `fixed.length` into the callee's rest array,
34
+ * which is exactly what the language's own iteration would hand it. An
35
+ * optional position before the rest, or a variadic position, has no such
36
+ * split and stays `null`.
37
+ */
38
+ export const openTupleSpreadShapeOf = (context, type) => {
39
+ const shape = context.table.get(type).shape;
40
+ if (shape.kind !== 'tuple')
41
+ return null;
42
+ const rest = shape.elements.findIndex((element) => element.rest);
43
+ if (rest < 0 || rest !== shape.elements.length - 1)
44
+ return null;
45
+ const fixed = shape.elements.slice(0, rest);
46
+ if (fixed.some((element) => element.optional || element.rest || element.variadic))
47
+ return null;
48
+ const tail = shape.elements[rest];
49
+ if (!tail || tail.variadic)
50
+ return null;
51
+ return { fixed: fixed.map((element) => element.type), tail: tail.type };
52
+ };
53
+ /** Whether `...expression`'s own source is a closed tuple, asked without minting anything. */
54
+ export const isClosedTupleSpread = (context, expression) => closedTupleElementTypesOf(context, context.types.typeAt(expression)) !== null;
55
+ /**
56
+ * The arity a REST PARAMETER spread expands to when the parameter's own
57
+ * declared type is a CLOSED tuple, or `null` for anything else.
58
+ *
59
+ * `/** @param {[number, number, number, number, number]} args *\/ function
60
+ * texStorage2D( ...args ) { gl.texStorage2D( ...args ) }` -- three's
61
+ * `WebGLState.js` as the native-webgl-angle plugin rewrites its
62
+ * `...arguments` forwarders. The parameter's CELL is typed by
63
+ * `structural.ts`'s `rest-parameter-array-element` form from call-site
64
+ * evidence, an array of the joined argument types, so `isClosedTupleSpread`
65
+ * above never sees a tuple and the spread fell through to the range-copy
66
+ * refusal ("can only be range-copied into a rest parameter") against a host
67
+ * function with five named formals. The cell's type is right -- the rest slot
68
+ * materializes an array -- but the DECLARATION states its length: every
69
+ * position required, no optional, rest or variadic element, and the checker
70
+ * refuses any call site that passes a different count. That is exactly the
71
+ * fact a closed tuple LOCAL supplies, asked of the declaration instead of the
72
+ * cell; the reads it admits are ordinary constant-index `[[Get]]`s off the
73
+ * array the cell holds (`declaredTupleRestSpreadReads`).
74
+ *
75
+ * Only an ARRAY-shaped cell qualifies: a parameter this compiler settled to
76
+ * anything else has a different carrier, and a constant-index read against it
77
+ * would be a claim this producer cannot check.
78
+ */
79
+ const declaredTupleRestElementsOf = (context, expression) => {
80
+ if (!ts.isIdentifier(expression))
81
+ return null;
82
+ const symbol = context.checker.getSymbolAtLocation(expression);
83
+ const declaration = symbol ? context.identities.declarationOfSymbol(symbol) : null;
84
+ if (!declaration || !ts.isParameter(declaration))
85
+ return null;
86
+ const elements = declaredClosedTupleRestElementsOf(context.checker, declaration);
87
+ if (elements === null)
88
+ return null;
89
+ return context.table.get(context.types.typeAt(expression)).shape.kind === 'array' ? elements : null;
90
+ };
91
+ export const declaredTupleRestArityOf = (context, expression) => declaredTupleRestElementsOf(context, expression)?.length ?? null;
92
+ /**
93
+ * The positional reads a declared-tuple rest parameter spread expands to
94
+ * (`declaredTupleRestArityOf`), each typed as the DECLARED tuple's own
95
+ * position -- not as the array cell's element. The cell holds the join of
96
+ * every position (`[string, number, number]` is an array of `string | number`),
97
+ * and a read typed by that join handed `describe( name, x, y )` a
98
+ * `string | number` for `x`, which made `x * y` a dynamic multiplication with
99
+ * no C++ spelling. The declaration is what fixes the value at each position,
100
+ * and a closed tuple LOCAL's reads are typed the same way off the same
101
+ * tagged-union carrier.
102
+ */
103
+ export const declaredTupleRestSpreadReads = (context, candidate, expression) => {
104
+ const elements = declaredTupleRestElementsOf(context, expression);
105
+ if (elements === null)
106
+ return null;
107
+ const receiver = spreadReceiverOf(context, expression);
108
+ if (!receiver)
109
+ return null;
110
+ return mintPositionalSpreadReads(context, candidate, receiver, elements.map((element) => context.types.typeOf(element)));
111
+ };
112
+ /**
113
+ * The receiver both expansions below read positions off: `resolveExpressionOperand`'s
114
+ * own VALUE identity (which family published this expression's result --
115
+ * correctly resolved past an `as`/`satisfies`/`<T>` wrapper, since none of
116
+ * those own a runtime operation of their own), paired with the TYPE asked
117
+ * directly at `expression`, exactly as `isClosedTupleSpread`/
118
+ * `admitsMaxArityTupleSpread` (`spread-arguments.ts`) already ask it -- not
119
+ * `resolveExpressionOperand`'s own bundled `.type`, which asks past the same
120
+ * wrapper for the type too and disagrees with both admission gates the
121
+ * moment one is present. `args as Parameters<NewResponse>` (hono's
122
+ * `Context.newResponse`) is the concrete case: the CAST states a real closed
123
+ * shape the underlying `args` binding does not have on its own (an ordinary,
124
+ * open-arity array, once the rest-parameter census has done its job) -- an
125
+ * admission gate that reads the cast agrees to expand it, and an expansion
126
+ * that then reads past the cast right back to the array finds no tuple
127
+ * there and refuses, silently, for an admission that already said yes.
128
+ * `local-bindings.ts`'s `knownOrResolve` draws this identical line for a
129
+ * cast ("the checker's own answer there is taken as-is and never read
130
+ * past"); this is that same rule, asked with the SAME node the two
131
+ * admission gates already use, so the three can only ever agree.
132
+ */
133
+ export const spreadReceiverOf = (context, expression) => {
134
+ const resolved = resolveExpressionOperand(context, expression);
135
+ return resolved ? { source: resolved.source, type: context.types.typeAt(expression) } : null;
136
+ };
137
+ /**
138
+ * The `[[Get]]`s a tuple's positions expand to, shared by every admission
139
+ * shape below -- each differs only in WHICH element types it is sound to ask
140
+ * for, never in how a position, once admitted, is read.
141
+ *
142
+ * The receiver is cited ONCE and read N times, which is what the language
143
+ * does: `f(...sideEffect())` evaluates `sideEffect()` a single time and then
144
+ * indexes the result. Citing the expression per position instead would name
145
+ * the same published result N times, which is harmless, but building the
146
+ * operand once makes that single evaluation explicit rather than incidental.
147
+ */
148
+ export const mintPositionalSpreadReads = (context, candidate, receiver, elements, firstIndex = 0) => {
149
+ // A tuple position's key is a String, the same way every other static key in
150
+ // this compiler is: `properties.ts`'s `keyOf` interns exactly this type for
151
+ // `o[0]`, on the grounds that ToPropertyKey turns a numeric index into a
152
+ // String and two spellings of one key must not look like two keys.
153
+ const keyType = context.table.intern({ kind: 'primitive', primitive: 'string' });
154
+ const operations = [];
155
+ const edges = [];
156
+ const positions = [];
157
+ for (const [offset, elementType] of elements.entries()) {
158
+ const index = firstIndex + offset;
159
+ const id = mintOperationId(context.ordinals, candidate.id, 'property');
160
+ operations.push({
161
+ id,
162
+ family: 'property',
163
+ internalMethod: 'get',
164
+ strict: true,
165
+ keyIsComputed: false,
166
+ // A read consults whatever descriptor is installed; it states none.
167
+ descriptor: null,
168
+ caller: candidate.caller,
169
+ operands: [
170
+ operand('receiver', 0, receiver.source, receiver.type),
171
+ operand('key', 0, { kind: 'constant', text: String(index), literal: 'string' }, keyType)
172
+ ],
173
+ results: [mintResult(id, 'value', elementType)],
174
+ // A tuple type excludes `null`/`undefined` by construction, so the read
175
+ // cannot be the nullish-receiver TypeError an ordinary `[[Get]]` guards
176
+ // against, and a tuple position is native storage rather than an
177
+ // accessor, so nothing user-written runs here either.
178
+ completion: normalCompletion,
179
+ effects: { ...pureEffects, readsMutableState: true },
180
+ evaluationOrdinal: candidate.evaluationOrdinal
181
+ });
182
+ const edge = resultEdge(receiver.source, id, 'receiver', 0);
183
+ if (edge)
184
+ edges.push(edge);
185
+ positions.push({ source: { kind: 'result', result: semanticResultId(id, 'value') }, type: elementType });
186
+ }
187
+ return { operations, edges, positions };
188
+ };
189
+ /**
190
+ * The positional reads `...expression` expands to, or `null` when the source
191
+ * is not a closed tuple or when no operation publishes its value.
192
+ */
193
+ export const tupleSpreadReads = (context, candidate, expression) => {
194
+ const receiver = spreadReceiverOf(context, expression);
195
+ if (!receiver)
196
+ return null;
197
+ const elements = closedTupleElementTypesOf(context, receiver.type);
198
+ if (!elements)
199
+ return null;
200
+ return mintPositionalSpreadReads(context, candidate, receiver, elements);
201
+ };
202
+ /**
203
+ * The per-position types of a tuple whose only "unsettled" elements are a
204
+ * trailing OPTIONAL run, or `null` for anything else -- including a `rest`/
205
+ * `variadic` element, which still has no settled arity at all.
206
+ *
207
+ * `closedTupleElementTypesOf` above is right to refuse an optional-tailed
208
+ * tuple for its own callers: a spread's DESTINATION cares about the source's
209
+ * true runtime LENGTH (`[...t]` with `t.length === 1` must allocate a
210
+ * one-element array, not `[t[0], undefined]`), and expanding to the tuple's
211
+ * full declared arity would silently manufacture a longer collection than the
212
+ * source ever had. `maxArityTupleSpreadReads` is the one context where a
213
+ * fixed-at-declared-arity expansion is still exact rather than approximate --
214
+ * see it for why.
215
+ *
216
+ * The type widening happens HERE, at the element, rather than being layered
217
+ * onto every read: `t[i]` for an absent optional position `i` already reads
218
+ * `undefined` by ordinary out-of-bounds `[[Get]]`, so the element's own type
219
+ * has to say so, exactly the way `parameter-slot.ts`'s `parameterSlotTypeOf`
220
+ * widens an optional PARAMETER's slot with `undefined` for the same reason.
221
+ * The union is flattened rather than nested -- a member that is already a
222
+ * union has its own members spliced in -- because only a flat union derives
223
+ * to this compiler's three-armed optional carrier (`parameter-slot.ts`'s own
224
+ * comment states why a nested one would not).
225
+ */
226
+ export const maxArityTupleElementTypesOf = (context, type) => {
227
+ const shape = context.table.get(type).shape;
228
+ if (shape.kind !== 'tuple')
229
+ return null;
230
+ if (shape.elements.some((element) => element.rest || element.variadic))
231
+ return null;
232
+ return shape.elements.map((element) => (element.optional ? widenedWithUndefined(context, element.type) : element.type));
233
+ };
234
+ const widenedWithUndefined = (context, type) => {
235
+ const undefinedType = context.table.intern({ kind: 'primitive', primitive: 'undefined' });
236
+ if (type === undefinedType)
237
+ return type;
238
+ const shape = context.table.get(type).shape;
239
+ if (shape.kind === 'union') {
240
+ return shape.members.includes(undefinedType)
241
+ ? type
242
+ : context.table.intern({ kind: 'union', members: [...shape.members, undefinedType] });
243
+ }
244
+ return context.table.intern({ kind: 'union', members: [type, undefinedType] });
245
+ };
246
+ /**
247
+ * `...expression`'s positional reads, over an OPTIONAL-tailed tuple, for the
248
+ * one context where that is still sound: a CALL ARGUMENT, where an omitted
249
+ * argument and an explicitly `undefined` one read identically at the callee.
250
+ *
251
+ * Ordinary JS parameter binding makes that true unconditionally: an omitted
252
+ * argument binds `undefined` (ECMA-262 `FunctionDeclarationInstantiation` /
253
+ * `IteratorBindingInitialization` over a shorter argument list), and a
254
+ * defaulted parameter's initializer triggers on `undefined` however it
255
+ * arrived -- there is no third state a NAMED, non-rest parameter can
256
+ * observe. So `f(...t)` with `t: [A, B?]` reads IDENTICALLY at the callee
257
+ * whether `t`'s true runtime length is 1 or 2, PROVIDED:
258
+ *
259
+ * - the callee has no REST formal anywhere the tuple's positions could
260
+ * land -- a rest parameter's own `.length` DOES observe the caller's true
261
+ * argument count, which this fixed-at-declared-arity expansion cannot
262
+ * track;
263
+ * - nothing else follows this spread in the argument list -- a written
264
+ * argument after it would land at a position that shifts with the
265
+ * tuple's TRUE length, which only the real spread ever knows.
266
+ *
267
+ * Both conditions are the CALLER's to check (`spread-arguments.ts`'s
268
+ * `restFrom` and its own last-argument scan) -- this function only expands
269
+ * the positions, exactly as `tupleSpreadReads` does for a closed tuple.
270
+ */
271
+ export const maxArityTupleSpreadReads = (context, candidate, expression) => {
272
+ const receiver = spreadReceiverOf(context, expression);
273
+ if (!receiver)
274
+ return null;
275
+ const elements = maxArityTupleElementTypesOf(context, receiver.type);
276
+ if (!elements)
277
+ return null;
278
+ return mintPositionalSpreadReads(context, candidate, receiver, elements);
279
+ };
@@ -0,0 +1,36 @@
1
+ import ts from 'typescript';
2
+ import type { ValueFlowIndex } from './flow/model.js';
3
+ /** An over-approximation of ToPropertyKey's string results; unknown never excludes a name. */
4
+ export type PropertyKeyDomain = {
5
+ readonly kind: 'unknown';
6
+ } | {
7
+ readonly kind: 'literal';
8
+ readonly value: string;
9
+ } | {
10
+ readonly kind: 'number';
11
+ } | {
12
+ readonly kind: 'union';
13
+ readonly members: readonly PropertyKeyDomain[];
14
+ } | {
15
+ readonly kind: 'concat';
16
+ readonly left: PropertyKeyDomain;
17
+ readonly right: PropertyKeyDomain;
18
+ };
19
+ export declare const createPropertyKeyDomains: (checker: ts.TypeChecker, flow: ValueFlowIndex, reachable: (node: ts.Node) => boolean, parameterTypeAt?: (parameter: ts.Expression) => ts.Type) => {
20
+ readonly of: (expression: ts.Expression) => PropertyKeyDomain;
21
+ readonly mayName: (domain: PropertyKeyDomain, name: string) => boolean;
22
+ };
23
+ /**
24
+ * Whether ANY canonical numeric string lies in `domain` -- `mayName` asked of
25
+ * every such name at once. Each starts with `-`, a digit, `I` (Infinity) or `N`
26
+ * (NaN) and ends with a digit, `y` or `N`, and every spelled piece between
27
+ * must be a substring of such a name; an unknown domain may name anything.
28
+ *
29
+ * The interior rule is what three's `WebGLUniformsGroups.js` needs: its cache
30
+ * is keyed `index + '_' + indexArray`, two numbers around an underscore. The
31
+ * edges are unspelled, so the edge rule alone kept this write as a possible
32
+ * numeric key on the WebGL context, refused the context's numeric-absence
33
+ * proof, and left `WebGLUtils.convert`'s `gl[ p ]` fallback -- and every
34
+ * `glFormat`/`glType` downstream of it -- dynamic.
35
+ */
36
+ export declare const domainMayNameNumeric: (domain: PropertyKeyDomain) => boolean;
@@ -0,0 +1,150 @@
1
+ import ts from 'typescript';
2
+ import { unwrapErasedExpression } from './producers/erasure.js';
3
+ import { isCanonicalNumericKey } from './host-mutation-keys.js';
4
+ const unknown = { kind: 'unknown' };
5
+ const numeric = { kind: 'number' };
6
+ const literal = (value) => ({ kind: 'literal', value });
7
+ const concat = (left, right) => ({ kind: 'concat', left, right });
8
+ const isStringDomain = (domain) => domain.kind === 'literal' || domain.kind === 'concat' || (domain.kind === 'union' && domain.members.every(isStringDomain));
9
+ export const createPropertyKeyDomains = (checker, flow, reachable, parameterTypeAt = (parameter) => checker.getTypeAtLocation(parameter)) => {
10
+ const domains = new Map();
11
+ const typeDomain = (type) => {
12
+ if (type.isUnion())
13
+ return { kind: 'union', members: type.types.map(typeDomain) };
14
+ if (type.isStringLiteral())
15
+ return literal(type.value);
16
+ if ((type.flags & ts.TypeFlags.NumberLike) !== 0 && (type.flags & ~ts.TypeFlags.NumberLike) === 0)
17
+ return numeric;
18
+ return unknown;
19
+ };
20
+ const domainOf = (expression) => {
21
+ const current = unwrapErasedExpression(expression);
22
+ const known = domains.get(current);
23
+ if (known)
24
+ return known;
25
+ // Cyclic aliases provide no restriction. This placeholder also bounds
26
+ // recursive initializers without mistaking an empty cycle for evidence.
27
+ domains.set(current, unknown);
28
+ let result = unknown;
29
+ if (ts.isStringLiteralLike(current))
30
+ result = literal(current.text);
31
+ else if (ts.isNumericLiteral(current))
32
+ result = numeric;
33
+ else if (ts.isTemplateExpression(current)) {
34
+ result = literal(current.head.text);
35
+ for (const span of current.templateSpans)
36
+ result = concat(concat(result, domainOf(span.expression)), literal(span.literal.text));
37
+ }
38
+ else if (ts.isConditionalExpression(current)) {
39
+ result = { kind: 'union', members: [domainOf(current.whenTrue), domainOf(current.whenFalse)] };
40
+ }
41
+ else if (ts.isBinaryExpression(current) && current.operatorToken.kind === ts.SyntaxKind.PlusToken) {
42
+ const left = domainOf(current.left);
43
+ const right = domainOf(current.right);
44
+ // A string assertion does not change numeric addition into concatenation.
45
+ if (isStringDomain(left) || isStringDomain(right))
46
+ result = concat(left, right);
47
+ else if (left.kind === 'number' && right.kind === 'number')
48
+ result = numeric;
49
+ }
50
+ else {
51
+ const declaration = ts.isIdentifier(current) ? flow.targetOf(current)?.declaration : null;
52
+ if (declaration && ts.isVariableDeclaration(declaration)) {
53
+ const writes = flow.writesToDeclaration(declaration).filter((write) => reachable(write.site) && write.slot === 'whole');
54
+ result =
55
+ writes.length > 0
56
+ ? { kind: 'union', members: writes.map((write) => (write.value === null ? unknown : domainOf(write.value))) }
57
+ : unknown;
58
+ }
59
+ else if (ts.isIdentifier(current) && declaration && ts.isParameter(declaration)) {
60
+ result = typeDomain(parameterTypeAt(current));
61
+ }
62
+ }
63
+ domains.set(current, result);
64
+ return result;
65
+ };
66
+ const matches = new Map();
67
+ const mayName = (domain, name) => {
68
+ let names = matches.get(domain);
69
+ if (!names) {
70
+ names = new Map();
71
+ matches.set(domain, names);
72
+ }
73
+ const known = names.get(name);
74
+ if (known !== undefined)
75
+ return known;
76
+ let result;
77
+ switch (domain.kind) {
78
+ case 'unknown':
79
+ result = true;
80
+ break;
81
+ case 'literal':
82
+ result = domain.value === name;
83
+ break;
84
+ case 'number':
85
+ result = String(Number(name)) === name;
86
+ break;
87
+ case 'union':
88
+ result = domain.members.some((member) => mayName(member, name));
89
+ break;
90
+ case 'concat': {
91
+ result = false;
92
+ for (let split = 0; split <= name.length; split++) {
93
+ if (mayName(domain.left, name.slice(0, split)) && mayName(domain.right, name.slice(split))) {
94
+ result = true;
95
+ break;
96
+ }
97
+ }
98
+ break;
99
+ }
100
+ }
101
+ names.set(name, result);
102
+ return result;
103
+ };
104
+ return { of: domainOf, mayName };
105
+ };
106
+ const domainEdgeLiteral = (domain, side) => domain.kind === 'literal' ? domain.value : domain.kind === 'concat' ? domainEdgeLiteral(domain[side], side) : null;
107
+ /**
108
+ * Every character a canonical numeric string can contain: the decimal and
109
+ * exponent forms (`-1.5e+21`), `Infinity`, `-Infinity` and `NaN`. A spelled
110
+ * fragment holding any other character cannot be a substring of one, wherever
111
+ * it sits in the concatenation.
112
+ */
113
+ const CANONICAL_NUMERIC_ALPHABET = /^[-+.\deINafinty]*$/;
114
+ const domainLiteralPieces = (domain) => domain.kind === 'literal'
115
+ ? [domain.value]
116
+ : domain.kind === 'concat'
117
+ ? [...domainLiteralPieces(domain.left), ...domainLiteralPieces(domain.right)]
118
+ : [];
119
+ /**
120
+ * Whether ANY canonical numeric string lies in `domain` -- `mayName` asked of
121
+ * every such name at once. Each starts with `-`, a digit, `I` (Infinity) or `N`
122
+ * (NaN) and ends with a digit, `y` or `N`, and every spelled piece between
123
+ * must be a substring of such a name; an unknown domain may name anything.
124
+ *
125
+ * The interior rule is what three's `WebGLUniformsGroups.js` needs: its cache
126
+ * is keyed `index + '_' + indexArray`, two numbers around an underscore. The
127
+ * edges are unspelled, so the edge rule alone kept this write as a possible
128
+ * numeric key on the WebGL context, refused the context's numeric-absence
129
+ * proof, and left `WebGLUtils.convert`'s `gl[ p ]` fallback -- and every
130
+ * `glFormat`/`glType` downstream of it -- dynamic.
131
+ */
132
+ export const domainMayNameNumeric = (domain) => {
133
+ switch (domain.kind) {
134
+ case 'literal':
135
+ return isCanonicalNumericKey(domain.value);
136
+ case 'union':
137
+ return domain.members.some(domainMayNameNumeric);
138
+ case 'concat': {
139
+ const lead = domainEdgeLiteral(domain, 'left');
140
+ const trail = domainEdgeLiteral(domain, 'right');
141
+ if (lead && !/^[-\dIN]/.test(lead))
142
+ return false;
143
+ if (trail && !/[\dyN]$/.test(trail))
144
+ return false;
145
+ return domainLiteralPieces(domain).every((piece) => CANONICAL_NUMERIC_ALPHABET.test(piece));
146
+ }
147
+ default:
148
+ return true;
149
+ }
150
+ };
@@ -0,0 +1,189 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * What a program reaches from the files it was asked to compile.
4
+ *
5
+ * A project's file set is not its module graph. `include` names every file a
6
+ * *typechecker* should see; what an application does is what its entry points
7
+ * import, and nothing else runs. Compiling the first as though it were the
8
+ * second is how an app that imports `Display` and `mount` acquires the
9
+ * obligations of a camera it never opens: `runtime/host.ts` is one file, so
10
+ * the whole of it -- `Camera`'s four `Promise.resolve` calls, `imageHost`'s
11
+ * `GeaEmbeddedImage` boundary -- arrives alongside the two bindings the app
12
+ * actually asked for.
13
+ *
14
+ * This is the one place that difference is decided. Every census downstream
15
+ * walks the statements this hands it rather than the file it hands them for,
16
+ * so there is one answer to "is this code in the program" instead of four that
17
+ * can drift apart.
18
+ *
19
+ * Nothing here changes what anything *means*. The checker still sees the whole
20
+ * project, so every type resolves exactly as it did and every layout is still
21
+ * expanded from the checker's own answer -- a declaration this drops is
22
+ * dropped from the *census*, not from the type system. That is what makes the
23
+ * pruning safe to state at one seam: the stages after normalize cannot tell
24
+ * that it happened, because the program they are handed simply does not
25
+ * contain the code, and obligations, certification, lowering and emission all
26
+ * read that one graph.
27
+ *
28
+ * ## What it refuses to prune
29
+ *
30
+ * The rule is not "unreferenced code is dead". A module's top level *runs* on
31
+ * import, so a statement that performs an action -- a call, an assignment, an
32
+ * `if`, an `export default` expression, a bare expression statement -- stays
33
+ * whether or not anything reads what it produced. Exactly three declaration
34
+ * forms are ever dropped, each because its own evaluation is provably not an
35
+ * action:
36
+ *
37
+ * - A **function declaration**. Its evaluation is `InstantiateFunctionObject`:
38
+ * a closure is created and bound. Nothing observable happens, and the body
39
+ * does not run.
40
+ * - A **class declaration** with no decorators, no `extends` clause, no static
41
+ * block, no static field initializer and no computed member name.
42
+ * `ClassDefinitionEvaluation` for such a class evaluates nothing at all, and
43
+ * this compiler lowers class evaluation to *no runtime step at all*
44
+ * (`ir/lower.ts`, `case 'class-lifecycle'`): the struct and the construct
45
+ * function it emits already are the layout the definition events record. A
46
+ * static block or a static initializer is the opposite -- each is a real
47
+ * region with a body -- so a class carrying one is kept; so is a class with
48
+ * a heritage clause, whose one definition-time step (the heritage read) is
49
+ * the event the projection takes the struct's base from (see
50
+ * `classDefinitionIsInert`).
51
+ * - A **variable statement** whose every declarator binds a plain name and has
52
+ * either no initializer or an initializer drawn from `initializerIsInert`'s
53
+ * whitelist: literals, function/arrow/class expressions, and object/array
54
+ * literals built from those. Anything that could call something -- a call, a
55
+ * `new`, a property read (which can be a getter), a template substitution
56
+ * (which can be a `toString`), a spread, an assignment, even a bare
57
+ * identifier read (which can be a temporal-dead-zone throw) -- is outside the
58
+ * whitelist, and the statement is kept.
59
+ *
60
+ * Everything else is kept unconditionally: imports, exports, `export default`,
61
+ * expression statements, control flow, enums, namespaces, and every type-only
62
+ * declaration. Type declarations cost nothing to keep -- `familyOf`
63
+ * (`census.ts`) assigns no family to an interface or a type alias, so they
64
+ * contribute no candidates either way -- and keeping them removes the whole
65
+ * question of whether a record layout was pruned out from under a live value.
66
+ *
67
+ * ## The second granularity: a class member
68
+ *
69
+ * A live class is live whole as a DEFINITION -- its layout, its fields, its
70
+ * constructor -- but a method body runs only when a dispatch names it, and a
71
+ * dispatch has to name it. `C.m` resolves to one declaration, so a static
72
+ * member is opened by symbol. An instance member cannot be: a structurally
73
+ * typed parameter, a base-class reference and an interface-typed call all land
74
+ * on a member the receiver's static type does not identify, and an override is
75
+ * reached through the base's name. So an instance member is opened by KEY --
76
+ * any spelling of its name in live code, on any receiver, opens every member
77
+ * that answers that name on every class.
78
+ *
79
+ * This is the same cut `ir/shake.ts` makes over the lowered IR, and its own
80
+ * header states the fact that makes the key comparison sound for this backend:
81
+ * a class method or accessor is addressable only through a key spelled at
82
+ * compile time, because `emit-properties.ts` refuses a dynamic key by name and
83
+ * the two dynamic paths that do exist address record fields and a box's
84
+ * expando, neither of which can answer a method key. What that pass could not
85
+ * do from the IR is stop a refusal inside a dead body from denying the whole
86
+ * program its certificate -- obligations are censused before lowering, so a
87
+ * method nothing calls still had to be representable. That is the reason this
88
+ * half of the cut lives here.
89
+ *
90
+ * A member reached through no spelling at all -- the gea plugin lowers
91
+ * `instance.render(root, depth)` into a call to the class's own `template`
92
+ * (`plugins/gea/render-bridge.ts`) -- is not something this walk can see, so
93
+ * the host states its own such names instead: see `hostReachedMemberKeys`.
94
+ *
95
+ * ## Fail-closed everywhere it cannot see
96
+ *
97
+ * - No entry file resolves: nothing is pruned at all (`wholeProgram`).
98
+ * - A reference resolves into a file this walk has not reached: that file is
99
+ * *promoted* to reachable rather than the reference dropped. A missed import
100
+ * edge, a global script file that nothing imports, a `declare global`
101
+ * augmentation -- each resurrects its file the moment anything names
102
+ * something in it.
103
+ * - A reference is followed for **every** identifier in live code, in type
104
+ * position as well as value position, and through property names too. A
105
+ * property name resolves to the member of the type it was read off, so a
106
+ * structural read of a class member keeps that class. Over-marking costs
107
+ * dead code left in; under-marking is the only direction that could be
108
+ * wrong, so the walk is deliberately blunt.
109
+ * - Only an import or a re-export is *not* traversed for references, because
110
+ * neither uses what it names: `export { mount } from './primitives'`
111
+ * re-exports a binding without reading it, and traversing one would make
112
+ * every barrel file mark its whole surface live -- which is precisely the
113
+ * state being removed. An importer that really does use the name resolves
114
+ * the alias chain to the same declaration and marks it here.
115
+ */
116
+ export interface ProgramReachability {
117
+ /** The top-level statements of `file` this program reaches, in source order. */
118
+ readonly statementsOf: (file: ts.SourceFile) => readonly ts.Statement[];
119
+ /**
120
+ * Whether this node is an unused class member, or a constructor/initializer
121
+ * whose class is retained only for its instance layout.
122
+ *
123
+ * The second granularity this module answers at, and the only one below a
124
+ * statement. A class is opened whole because its DEFINITION is what a live
125
+ * reference reaches -- but a method's body is not part of that definition: it
126
+ * runs when a dispatch names it. So a method is exactly as prunable as a
127
+ * top-level function declaration, and for the same reason.
128
+ *
129
+ * A static is named by symbol (`C.m` resolves to one declaration) and an
130
+ * instance member by key (a dispatch's receiver does not say which class's
131
+ * member it lands on). See this module's header.
132
+ */
133
+ readonly memberIsPruned: (node: ts.Node) => boolean;
134
+ readonly classIsLayoutOnly: (node: ts.ClassDeclaration) => boolean;
135
+ }
136
+ /**
137
+ * Every statement of every file: the answer when nothing may be pruned.
138
+ *
139
+ * This is the fail-closed value, and it is what a compilation whose entry
140
+ * points could not be resolved gets. It is deliberately not the default of any
141
+ * parameter -- a census that silently walked the whole program because someone
142
+ * forgot to thread the reachability through would be the second authority this
143
+ * module exists to prevent.
144
+ */
145
+ export declare const wholeProgram: ProgramReachability;
146
+ /**
147
+ * `ts.forEachChild(file, visit)` restricted to what the program reaches.
148
+ *
149
+ * Every census in the parameter-binding family walks a file this way, and a
150
+ * walk that still visited a pruned statement counted references in code the
151
+ * program never runs: test262's propertyHelper ends with the inert, unreached
152
+ * `var verifyPrimordialProperty = verifyProperty`, and that one alias made
153
+ * the parameter census refuse `verifyProperty` as "escaping" -- so its `obj`
154
+ * never learned it is only ever called with `Math`, and every helper under it
155
+ * went dynamic. A declaration file has no statements the program evaluates,
156
+ * the same exclusion the walks made for themselves before.
157
+ */
158
+ export declare const forEachReachableStatement: (reachable: ProgramReachability, file: ts.SourceFile, visit: (node: ts.Node) => void) => void;
159
+ /**
160
+ * Whether `node` is code the program runs: inside a top-level statement this
161
+ * program reaches, and under no member it pruned -- the boundary
162
+ * `forEachReachableStatement` draws for a walk, asked of one node a walk did
163
+ * not produce. A module the checker loaded but the program never evaluates
164
+ * (three's `ColorSpaceNode.js`, pulled in beside the node materials) answers
165
+ * false everywhere.
166
+ */
167
+ export declare const nodeIsReachable: (reachable: ProgramReachability, node: ts.Node) => boolean;
168
+ export interface ReachabilityInput {
169
+ readonly checker: ts.TypeChecker;
170
+ /** The files this compiler is responsible for -- `CompiledProgram.sourceFiles`. */
171
+ readonly files: readonly ts.SourceFile[];
172
+ /** The files the caller named. Empty means the entry points are unknown, and nothing is pruned. */
173
+ readonly entries: readonly ts.SourceFile[];
174
+ /**
175
+ * Member names a HOST reaches without the program spelling them.
176
+ *
177
+ * The gea plugin lowers `instance.render(root, depth)` into a call to the
178
+ * class's own `template` member (`plugins/gea/render-bridge.ts`), which no
179
+ * TypeScript source names -- so nothing in this walk could ever see it
180
+ * spelled, and the member-key rule below would drop the one body the bridge
181
+ * calls. A plugin states its own such names (`PluginCapabilities`'
182
+ * `reachedMemberKeys`) rather than this file knowing any of them: which
183
+ * members a host reaches is the host's fact, and a name hard-coded here
184
+ * would be gea behaviour living in the generic compiler.
185
+ */
186
+ readonly hostReachedMemberKeys?: ReadonlySet<string>;
187
+ }
188
+ export declare const moduleEvaluationOrder: (input: ReachabilityInput) => readonly ts.SourceFile[];
189
+ export declare const censusReachability: (input: ReachabilityInput) => ProgramReachability;