@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,399 @@
1
+ import ts from 'typescript';
2
+ import { physicalOverloadTypeAt } from './structural-declarations.js';
3
+ /** A census that knows nothing, for a caller that has not run the walk. */
4
+ export const emptyInstantiationCensus = { bindingOf: () => null };
5
+ /**
6
+ * Whether this type is itself a hole.
7
+ *
8
+ * Binding one parameter to another -- `class ReactiveComponent<E> extends
9
+ * Component<E>` binds `Component`'s parameter to `ReactiveComponent`'s -- says
10
+ * nothing about what either one finally is, and recording it would let a
11
+ * substitution resolve to a second hole. The chain is worth following one day;
12
+ * recording it as an answer today would be a wrong one.
13
+ */
14
+ const isHole = (type) => (type.flags & ts.TypeFlags.TypeParameter) !== 0;
15
+ /**
16
+ * Pair a generic type with the instantiated one the checker produced from it,
17
+ * recording what each parameter was filled with.
18
+ *
19
+ * This walks the two types in lockstep rather than reading the checker's
20
+ * internal type mapper, which is not public API. The shapes are congruent by
21
+ * construction -- one *is* the other with holes filled -- so the walk is a
22
+ * structural comparison with no inference in it: at every position where the
23
+ * generic side is a hole, the concrete side is that hole's filling.
24
+ *
25
+ * Unions and intersections are deliberately not walked. `T | string` against
26
+ * `number | string` has no unique alignment -- the arms are a set, not a
27
+ * sequence -- and picking one would record a binding the language never made.
28
+ *
29
+ * ABSENCE is the exception, and it is not an exception to that argument: it is
30
+ * outside it. `status?: U` has type `U | undefined`, but that `undefined` is
31
+ * the OPTIONAL MODIFIER, not a declared alternative -- the program wrote one
32
+ * type and a `?`. So `status?: U` against `status?: ContentfulStatusCode` is
33
+ * `U | undefined` against `ContentfulStatusCode | undefined`, and refusing it
34
+ * as an ambiguous union bound nothing for `U` at all, which is what left
35
+ * hono's `c.json` generic uninstantiated. `withoutAbsence` strips exactly that
36
+ * modifier and requires ONE type to remain on each side, so nothing is
37
+ * aligned by position and no set is guessed; a union with two real arms still
38
+ * declines. It is also the rule the checker itself used: TypeScript infers an
39
+ * optional parameter from its non-`undefined` part.
40
+ */
41
+ /**
42
+ * A type with the absence its OPTIONALITY contributes removed -- or `null` when
43
+ * what remains is not a single type.
44
+ *
45
+ * `undefined`, `null` and `void` are what a `?` modifier and a
46
+ * `strictNullChecks` widening add; they are not arms the program chose between.
47
+ * A type that is not a union, or one whose non-absent arms are more than one,
48
+ * is returned unchanged / `null` respectively, so the caller can tell "nothing
49
+ * to strip" from "stripped, and ambiguous".
50
+ */
51
+ const absenceFlags = ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void;
52
+ const withoutAbsence = (type) => {
53
+ if (!type.isUnion())
54
+ return type;
55
+ const present = type.types.filter((arm) => (arm.flags & absenceFlags) === 0);
56
+ if (present.length === type.types.length)
57
+ return type;
58
+ return present.length === 1 ? (present[0] ?? null) : null;
59
+ };
60
+ const unify = (checker, generic, concrete, depth, record) => {
61
+ if (depth > 8)
62
+ return;
63
+ if (generic === concrete)
64
+ return;
65
+ if (isHole(generic)) {
66
+ record(generic, concrete);
67
+ return;
68
+ }
69
+ const genericPresent = withoutAbsence(generic);
70
+ const concretePresent = withoutAbsence(concrete);
71
+ if (genericPresent !== generic || concretePresent !== concrete) {
72
+ if (genericPresent !== null && concretePresent !== null) {
73
+ unify(checker, genericPresent, concretePresent, depth + 1, record);
74
+ }
75
+ return;
76
+ }
77
+ const genericReference = generic;
78
+ const concreteReference = concrete;
79
+ if ((generic.flags & ts.TypeFlags.Object) !== 0 &&
80
+ (concrete.flags & ts.TypeFlags.Object) !== 0 &&
81
+ genericReference.target !== undefined &&
82
+ genericReference.target === concreteReference.target) {
83
+ const generics = genericReference.typeArguments ?? [];
84
+ const concretes = concreteReference.typeArguments ?? [];
85
+ for (let index = 0; index < Math.min(generics.length, concretes.length); index += 1) {
86
+ const left = generics[index];
87
+ const right = concretes[index];
88
+ if (left && right)
89
+ unify(checker, left, right, depth + 1, record);
90
+ }
91
+ return;
92
+ }
93
+ unifySignatures(checker, generic.getCallSignatures(), concrete.getCallSignatures(), depth, record);
94
+ unifySignatures(checker, generic.getConstructSignatures(), concrete.getConstructSignatures(), depth, record);
95
+ };
96
+ /**
97
+ * One signature list against another.
98
+ *
99
+ * Only a single-signature pair is walked. An overloaded type's signatures are
100
+ * not ordered by anything the instantiation preserves, so aligning the nth with
101
+ * the nth would pair a generic's second overload with a concrete's second for
102
+ * no reason beyond position.
103
+ */
104
+ const unifySignatures = (checker, generics, concretes, depth, record) => {
105
+ const generic = generics[0];
106
+ const concrete = concretes[0];
107
+ if (generics.length !== 1 || concretes.length !== 1 || !generic || !concrete)
108
+ return;
109
+ unify(checker, generic.getReturnType(), concrete.getReturnType(), depth + 1, record);
110
+ // `this` IS a parameter, and the only one `Signature.parameters` leaves out.
111
+ // See `specialization.ts`'s twin of this walk for the generic that needs it;
112
+ // the two must bind the same holes or the census and the type table disagree
113
+ // about which copies exist.
114
+ const genericThis = generic.thisParameter;
115
+ const concreteThis = concrete.thisParameter;
116
+ if (genericThis && concreteThis) {
117
+ const genericThisType = typeOfParameter(checker, genericThis);
118
+ const concreteThisType = typeOfParameter(checker, concreteThis);
119
+ if (genericThisType && concreteThisType)
120
+ unify(checker, genericThisType, concreteThisType, depth + 1, record);
121
+ }
122
+ for (let index = 0; index < Math.min(generic.parameters.length, concrete.parameters.length); index += 1) {
123
+ const left = generic.parameters[index];
124
+ const right = concrete.parameters[index];
125
+ if (!left || !right)
126
+ continue;
127
+ const leftType = typeOfParameter(checker, left);
128
+ const rightType = typeOfParameter(checker, right);
129
+ if (leftType && rightType)
130
+ unify(checker, leftType, rightType, depth + 1, record);
131
+ }
132
+ };
133
+ /** A parameter symbol's declared type, or `null` when the symbol has no declaration to read it at. */
134
+ const typeOfParameter = (checker, parameter) => {
135
+ const at = parameter.valueDeclaration ?? parameter.declarations?.[0];
136
+ return at ? checker.getTypeOfSymbolAtLocation(parameter, at) : null;
137
+ };
138
+ /** A declaration's own `typeParameters`, or none when it declares none. */
139
+ const typeParametersOf = (declaration) => {
140
+ const withParameters = declaration;
141
+ return withParameters.typeParameters ?? [];
142
+ };
143
+ /**
144
+ * Every instantiation the program makes, collected before anything is
145
+ * normalized.
146
+ *
147
+ * Two sources, and they are different questions. A *call* instantiates a
148
+ * generic signature, and the checker has already inferred its arguments -- so
149
+ * the resolved signature paired against the generic one it came from is the
150
+ * whole answer. A *type reference* instantiates a generic declaration directly,
151
+ * including through a default (`class Home extends Component` is
152
+ * `Component<unknown>`), and there the type's own arguments are the answer with
153
+ * nothing to unify.
154
+ *
155
+ * The walk covers the program's own files, not its declaration files: an
156
+ * instantiation is something a program does, and a `.d.ts` states types without
157
+ * ever performing one.
158
+ */
159
+ // Every `checker.getTypeAtLocation` / `Signature.getReturnType()` /
160
+ // `checker.getTypeOfSymbolAtLocation` call below (in `unify`, `unifySignatures`,
161
+ // `typeOfParameter`, `genericSignatureOf`, `fromOverloadedPhysicalCallee`,
162
+ // `fromTypeReference`, and the `visit` walk) is answering "what did the
163
+ // LANGUAGE resolve this generic/call/heritage site to", not "what does this
164
+ // node hold" -- there is no `censusedTypeAt` question to ask here. This runs
165
+ // BEFORE the parameter/return/local/field binding census exists at all
166
+ // (`frontend.ts`'s `runFrontend` computes `instantiations` and
167
+ // `specializations` first, specifically because the fixpoint below needs the
168
+ // generic/specialization answers as an input, not the other way round -- see
169
+ // this file's own header and `specialization.ts`'s: "answers it before
170
+ // anything is normalized, because the census has to know how many copies of
171
+ // each body to emit before it emits any"). So converting a site here is not
172
+ // merely risky, as the mission brief warns for generic-instantiation code --
173
+ // there is no census instance in scope to convert it TO. Left as direct
174
+ // checker calls, verified by reading `frontend.ts`'s call order.
175
+ export const censusInstantiations = (checker, sourceFiles, reachable) => {
176
+ /**
177
+ * Two buckets per parameter, not one. `genuine` is a real instantiation --
178
+ * a call, `new`, or type reference the program actually writes. `defaults`
179
+ * is what a type parameter's OWN constraint resolves to when nothing else
180
+ * fills it in -- `mount<RootComponent extends Component>` binds
181
+ * `Component`'s parameter to `GeaElement` this way for every program, since
182
+ * every program calls `mount`.
183
+ *
184
+ * That default is not a rival answer to a genuine binding; it is the
185
+ * fallback for when there is no genuine one. A program with one genuine
186
+ * instantiation (`class App extends Component<GeaCanvasElement>`) plus the
187
+ * ever-present default must resolve to the genuine one, not be refused as
188
+ * "bound to two types" -- and a program with NO genuine instantiation
189
+ * anywhere (most apps reach `Component` only through `ReactiveComponent`,
190
+ * itself parameterized, so the chain never binds `Component`'s own
191
+ * parameter to a concrete type) must still resolve, to the default, rather
192
+ * than come up empty just because the default is no longer being
193
+ * miscounted as a second genuine site.
194
+ */
195
+ const bindings = new Map();
196
+ /** The symbol-keyed half of `recordInto`, reusable by a caller that already has a `ts.Symbol` rather than the hole `ts.Type` `unify` produces one. */
197
+ const recordSymbolInto = (bucket, symbol, bound) => {
198
+ if (isHole(bound))
199
+ return;
200
+ const entry = bindings.get(symbol) ?? { genuine: [], defaults: [] };
201
+ const list = entry[bucket];
202
+ if (!list.includes(bound))
203
+ list.push(bound);
204
+ bindings.set(symbol, entry);
205
+ };
206
+ const recordInto = (bucket) => (parameter, bound) => {
207
+ const symbol = parameter.getSymbol();
208
+ if (symbol)
209
+ recordSymbolInto(bucket, symbol, bound);
210
+ };
211
+ const record = recordInto('genuine');
212
+ const recordDefault = recordInto('defaults');
213
+ /**
214
+ * The uninstantiated signature a call was resolved from.
215
+ *
216
+ * `Signature.target` is where the checker keeps this, and it is not public
217
+ * API, so the generic is recovered the way a reader would: from the callee's
218
+ * own type. A callee whose type carries exactly one signature and that
219
+ * signature declares type parameters is the generic this call instantiated.
220
+ * More than one signature is an overload set, where which one was selected is
221
+ * precisely what is not recoverable from position, so those are skipped.
222
+ */
223
+ const genericSignatureOf = (node) => {
224
+ const callee = ts.isTaggedTemplateExpression(node)
225
+ ? node.tag
226
+ : ts.isJsxOpeningLikeElement(node)
227
+ ? node.tagName
228
+ : ts.isCallOrNewExpression(node)
229
+ ? node.expression
230
+ : null;
231
+ if (!callee)
232
+ return null;
233
+ const type = checker.getTypeAtLocation(callee);
234
+ const signatures = ts.isNewExpression(node) ? type.getConstructSignatures() : type.getCallSignatures();
235
+ const only = signatures[0];
236
+ if (signatures.length !== 1 || !only)
237
+ return null;
238
+ return only.getTypeParameters()?.length ? only : null;
239
+ };
240
+ /**
241
+ * A call through a callee whose DECLARED type is an overload set but whose
242
+ * physical value is one generic function literal -- the shape
243
+ * `genericSignatureOf` above correctly refuses (`signatures.length !== 1`),
244
+ * because which overload a call selected is not recoverable from the
245
+ * callee's declared type alone.
246
+ *
247
+ * `c.json(...)` (hono's `context.ts`) is exactly this: `json` is annotated
248
+ * `JSONRespond`, an interface with two overloaded generic call signatures,
249
+ * so the callee's type never carries one signature. But the type parameter
250
+ * that actually needs a binding belongs to neither overload -- it belongs
251
+ * to the one arrow function literal `json` was initialized with.
252
+ * `structural-declarations.ts`'s `physicalOverloadTypeAt` already reads
253
+ * that narrower truth for the property's own STORAGE type; this asks it of
254
+ * the callee's declaration to find the same literal.
255
+ *
256
+ * The checker's resolved signature for the call is still one of the
257
+ * interface's two overloads (`resolved.getDeclaration()` names a
258
+ * `CallSignatureDeclaration` inside `JSONRespond`, not the arrow), so the
259
+ * fillings are read off THAT overload's own uninstantiated form --
260
+ * `checker.getSignatureFromDeclaration` recovers it -- and then re-keyed
261
+ * onto the arrow's OWN type parameters by position. Sound because the
262
+ * interface overload and the literal satisfying it declare the same number
263
+ * of type parameters in the same order: TypeScript already proved the
264
+ * literal assignable to the overload it was assigned under, which is what
265
+ * let the program typecheck at all. Recorded as a GENUINE binding, exactly
266
+ * as an ordinary call would be -- this is one, just read through an extra
267
+ * layer of indirection the declared type hides.
268
+ */
269
+ const fromOverloadedPhysicalCallee = (node, resolved) => {
270
+ if (!ts.isCallOrNewExpression(node) || !ts.isPropertyAccessExpression(node.expression))
271
+ return;
272
+ const callee = node.expression;
273
+ const symbol = checker.getSymbolAtLocation(callee);
274
+ const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];
275
+ if (!declaration)
276
+ return;
277
+ const physical = physicalOverloadTypeAt(checker, declaration);
278
+ if (!physical)
279
+ return;
280
+ const physicalSignatures = physical.getCallSignatures();
281
+ const physicalSignature = physicalSignatures[0];
282
+ if (physicalSignatures.length !== 1 || !physicalSignature)
283
+ return;
284
+ const owner = physicalSignature.getDeclaration();
285
+ const ownerParameters = owner ? typeParametersOf(owner) : [];
286
+ if (!owner || ownerParameters.length === 0)
287
+ return;
288
+ const resolvedDeclaration = resolved.getDeclaration();
289
+ const uninstantiated = resolvedDeclaration ? checker.getSignatureFromDeclaration(resolvedDeclaration) : undefined;
290
+ if (!uninstantiated || uninstantiated === resolved)
291
+ return;
292
+ const interfaceParameters = uninstantiated.getTypeParameters() ?? [];
293
+ if (interfaceParameters.length !== ownerParameters.length)
294
+ return;
295
+ const bound = new Map();
296
+ unifySignatures(checker, [uninstantiated], [resolved], 0, (parameter, filling) => {
297
+ const parameterSymbol = parameter.getSymbol();
298
+ if (parameterSymbol && !bound.has(parameterSymbol) && !isHole(filling))
299
+ bound.set(parameterSymbol, filling);
300
+ });
301
+ for (let index = 0; index < interfaceParameters.length; index += 1) {
302
+ const interfaceSymbol = interfaceParameters[index]?.getSymbol();
303
+ const ownSymbol = checker.getSymbolAtLocation(ownerParameters[index].name);
304
+ const filling = interfaceSymbol && bound.get(interfaceSymbol);
305
+ if (filling && ownSymbol)
306
+ recordSymbolInto('genuine', ownSymbol, filling);
307
+ }
308
+ };
309
+ const fromCall = (node) => {
310
+ const resolved = checker.getResolvedSignature(node);
311
+ if (!resolved)
312
+ return;
313
+ const generic = genericSignatureOf(node);
314
+ if (generic && generic !== resolved) {
315
+ unifySignatures(checker, [generic], [resolved], 0, record);
316
+ return;
317
+ }
318
+ fromOverloadedPhysicalCallee(node, resolved);
319
+ };
320
+ const fromTypeReference = (type, into = record) => {
321
+ const reference = type;
322
+ const parameters = reference.target?.typeParameters;
323
+ const args = reference.typeArguments;
324
+ if (!parameters || !args)
325
+ return;
326
+ for (let index = 0; index < Math.min(parameters.length, args.length); index += 1) {
327
+ const parameter = parameters[index];
328
+ const bound = args[index];
329
+ if (parameter && bound)
330
+ into(parameter, bound);
331
+ }
332
+ };
333
+ const visit = (node) => {
334
+ // A PRUNED member is not reached either, and the statement-level rule
335
+ // below cannot say so -- a dead method lives inside a live class
336
+ // declaration, so `forEachChild` walks into it. The same guard the
337
+ // specialization census carries, for the same reason it states.
338
+ if (reachable.memberIsPruned(node))
339
+ return;
340
+ // A type parameter's own bound is not a USE of the generic it names in
341
+ // the way a call or a class heritage clause is: `<R extends Component>`
342
+ // states what `R` may be substituted with, and `mount`'s own body only
343
+ // ever touches `R`, never `Component` directly -- so this is never a
344
+ // second genuine instantiation site standing beside a real one. But it
345
+ // IS the fallback every caller who never overrides `R` resolves to, and
346
+ // most apps never do (they reach `Component` only through
347
+ // `ReactiveComponent<E> extends Component<E>`, where `E` is itself a
348
+ // hole this census correctly never chases). Recorded as a DEFAULT
349
+ // (`recordDefault`, a separate bucket from genuine bindings below) so it
350
+ // settles a parameter with no genuine instantiation anywhere, without
351
+ // ever manufacturing a false second binding beside a real one -- which is
352
+ // what recording it as a genuine site used to do.
353
+ if (ts.isTypeParameterDeclaration(node)) {
354
+ if (node.constraint)
355
+ fromTypeReference(checker.getTypeAtLocation(node.constraint), recordDefault);
356
+ return;
357
+ }
358
+ if (ts.isCallOrNewExpression(node) || ts.isTaggedTemplateExpression(node) || ts.isJsxOpeningLikeElement(node))
359
+ fromCall(node);
360
+ if (ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node) || ts.isNewExpression(node)) {
361
+ fromTypeReference(checker.getTypeAtLocation(node));
362
+ }
363
+ ts.forEachChild(node, visit);
364
+ };
365
+ // Whole-program still means whole *program*: a call site this compilation
366
+ // does not reach is not a call site, so counting one would let dead code
367
+ // decide that a live generic has two bindings and must be refused.
368
+ for (const file of sourceFiles)
369
+ for (const statement of reachable.statementsOf(file))
370
+ visit(statement);
371
+ const unique = new Map();
372
+ for (const [symbol, entry] of bindings) {
373
+ const declaration = symbol.declarations?.[0];
374
+ if (!declaration)
375
+ continue;
376
+ // More than one GENUINE binding means the body really does have more
377
+ // than one meaning, and substituting either would compile one call's
378
+ // program for the other call. That is the case body duplication exists
379
+ // for, and until it exists the honest answer is the refusal
380
+ // representation already gives -- unchanged from before defaults existed
381
+ // as a separate bucket.
382
+ if (entry.genuine.length > 1)
383
+ continue;
384
+ if (entry.genuine.length === 1) {
385
+ unique.set(declaration, entry.genuine[0]);
386
+ continue;
387
+ }
388
+ // Zero genuine instantiations anywhere reachable: the default a type
389
+ // parameter's own constraint resolves to is not a competing second
390
+ // answer here, it is the ONLY answer on offer, exactly as if the
391
+ // language itself had filled the hole. More than one distinct default
392
+ // (two differently-constrained generics disagreeing on this parameter)
393
+ // is exactly as ambiguous as two genuine sites, so it is refused the
394
+ // same way.
395
+ if (entry.defaults.length === 1)
396
+ unique.set(declaration, entry.defaults[0]);
397
+ }
398
+ return { bindingOf: (declaration) => unique.get(declaration) ?? null };
399
+ };
@@ -0,0 +1,18 @@
1
+ import ts from 'typescript';
2
+ import type { ProducerContext } from './producer-context.js';
3
+ import type { InvocationOperation } from '../model/operations.js';
4
+ /** Declaration identity only; consumers must discharge the static-member
5
+ * mutation obligation before using the operation's effects. Own-key queries
6
+ * return keys (or, for `hasOwn`, a presence fact derived from the key set)
7
+ * -- never the queried object's stored VALUES or its receiver. `hasOwn` also
8
+ * takes a second argument, the queried key itself; a consumer that treats
9
+ * this query as publishing nothing must still account for that key's own
10
+ * ToPropertyKey coercion (`ir/native-key-query.ts`'s `nativeKeyQueryOf`
11
+ * does). */
12
+ export declare const intrinsicOwnKeyQueryOf: (checker: ts.TypeChecker, callee: ts.Node) => {
13
+ readonly owner: "Object" | "Reflect";
14
+ readonly member: string;
15
+ } | null;
16
+ export type IntrinsicPropertyCallContext = Pick<ProducerContext, 'checker' | 'identities' | 'isStandardLibraryDeclaration' | 'globalHostMutationTaint'>;
17
+ /** Authenticate intrinsic property operations before checker identities and host mutation facts are sealed away. */
18
+ export declare const intrinsicPropertyCallOf: (context: IntrinsicPropertyCallContext, node: ts.CallExpression | ts.NewExpression, callee: ts.Node) => "own-keys" | "define-property" | "carrier-predicate" | NonNullable<InvocationOperation["intrinsicReflection"]> | null;
@@ -0,0 +1,69 @@
1
+ import ts from 'typescript';
2
+ import { intrinsicStaticMemberIsIntact } from './intrinsic-static-member.js';
3
+ import { intrinsicObjectKeysIntact } from './host-mutation-keys.js';
4
+ import { isGlobalArrayConstructor, isGlobalObjectConstructor, isStandardGlobalValue } from './derived-expression-type.js';
5
+ /** Declaration identity only; consumers must discharge the static-member
6
+ * mutation obligation before using the operation's effects. Own-key queries
7
+ * return keys (or, for `hasOwn`, a presence fact derived from the key set)
8
+ * -- never the queried object's stored VALUES or its receiver. `hasOwn` also
9
+ * takes a second argument, the queried key itself; a consumer that treats
10
+ * this query as publishing nothing must still account for that key's own
11
+ * ToPropertyKey coercion (`ir/native-key-query.ts`'s `nativeKeyQueryOf`
12
+ * does). */
13
+ export const intrinsicOwnKeyQueryOf = (checker, callee) => {
14
+ if (!ts.isPropertyAccessExpression(callee))
15
+ return null;
16
+ const owner = checker.getSymbolAtLocation(callee.expression);
17
+ const member = checker.getSymbolAtLocation(callee.name);
18
+ if (!owner?.valueDeclaration || !member?.declarations?.length)
19
+ return null;
20
+ if (![owner.valueDeclaration, ...member.declarations].every((declaration) => declaration.getSourceFile().hasNoDefaultLib))
21
+ return null;
22
+ const key = callee.name.text;
23
+ if (isStandardGlobalValue(checker, callee.expression, 'Object') &&
24
+ isGlobalObjectConstructor(checker, callee.expression, checker.getTypeAtLocation(callee.expression)) &&
25
+ (key === 'keys' || key === 'getOwnPropertyNames' || key === 'getOwnPropertySymbols' || key === 'hasOwn'))
26
+ return { owner: 'Object', member: key };
27
+ return key === 'ownKeys' && isStandardGlobalValue(checker, callee.expression, 'Reflect') ? { owner: 'Reflect', member: key } : null;
28
+ };
29
+ /** Authenticate intrinsic property operations before checker identities and host mutation facts are sealed away. */
30
+ export const intrinsicPropertyCallOf = (context, node, callee) => {
31
+ if (!ts.isCallExpression(node) || !ts.isPropertyAccessExpression(callee))
32
+ return null;
33
+ const member = callee.name.text;
34
+ const owner = callee.expression;
35
+ const symbol = context.checker.getSymbolAtLocation(owner);
36
+ const memberSymbol = context.checker.getSymbolAtLocation(callee.name);
37
+ if (!intrinsicStaticMemberIsIntact(context, symbol, memberSymbol, owner))
38
+ return null;
39
+ if (intrinsicOwnKeyQueryOf(context.checker, callee) !== null)
40
+ return 'own-keys';
41
+ if (isGlobalObjectConstructor(context.checker, owner, context.checker.getTypeAtLocation(owner))) {
42
+ if (member === 'getOwnPropertyDescriptor')
43
+ return 'getOwnPropertyDescriptor';
44
+ if (member === 'defineProperty') {
45
+ const prototype = context.checker.getTypeAtLocation(owner).getProperty('prototype');
46
+ const prototypeId = prototype ? context.identities.symbolDeclarationId(prototype) : null;
47
+ // ToPropertyDescriptor reads these six keys with HasProperty, so an
48
+ // inherited one on Object.prototype would change the descriptor.
49
+ return prototypeId !== null &&
50
+ intrinsicObjectKeysIntact(context.globalHostMutationTaint, prototypeId, {
51
+ names: ['enumerable', 'configurable', 'value', 'writable', 'get', 'set']
52
+ })
53
+ ? 'define-property'
54
+ : null;
55
+ }
56
+ return null;
57
+ }
58
+ // `Array.isArray(v)` -- 23.1.2.2. It is authenticated for the same reason
59
+ // `Object.keys` is and by the same guards above: what it publishes is a fact
60
+ // about the value's own kind, so a shadowed or host-mutated `Array` must not
61
+ // be able to acquire the claim.
62
+ if (member === 'isArray' && isGlobalArrayConstructor(context.checker, owner, context.checker.getTypeAtLocation(owner)))
63
+ return 'carrier-predicate';
64
+ if (!isStandardGlobalValue(context.checker, owner, 'Reflect'))
65
+ return null;
66
+ return member === 'get' || member === 'set' || member === 'has' || member === 'deleteProperty' || member === 'getOwnPropertyDescriptor'
67
+ ? member
68
+ : null;
69
+ };
@@ -0,0 +1,41 @@
1
+ import ts from 'typescript';
2
+ import type { ProducerContext } from './producer-context.js';
3
+ import { type PrototypeKeyQuery } from './host-mutation-keys.js';
4
+ type IntrinsicContext = Pick<ProducerContext, 'checker' | 'identities' | 'globalHostMutationTaint' | 'isStandardLibraryDeclaration'>;
5
+ export type { PrototypeKeyQuery } from './host-mutation-keys.js';
6
+ /**
7
+ * The WHOLE-object question: nothing at all was recorded against the
8
+ * intrinsic's constructor binding or its prototype, and no key was written
9
+ * through a receiver that might be any intrinsic. Prototype mutation is
10
+ * recorded on its identity, including writes through aliases. Prefer
11
+ * `intactIntrinsicPrototypeKeysType`: this answer fails under any single
12
+ * key write anywhere the census could not attribute.
13
+ */
14
+ export declare const intactIntrinsicPrototypeType: (context: IntrinsicContext, intrinsic: string, location: ts.Node) => ts.Type | null;
15
+ /**
16
+ * The PER-KEY question: the intrinsic's prototype is still the one the
17
+ * standard library declares for every key in `keys` -- none of them was
18
+ * added, replaced or deleted on it, directly, through an alias, or through a
19
+ * receiver that might be any intrinsic -- and the constructor binding that
20
+ * names it was neither replaced nor had its `prototype` key written.
21
+ *
22
+ * `keys` must list every key the caller's proof reads from the prototype:
23
+ * a key it proves ABSENT (`{ names: ['glslVersion'] }` for "Object.prototype
24
+ * lacks `glslVersion`"), every method a plan calls, `arrayIndices` when a
25
+ * hole read falls through to the prototype. A key left out is a key the
26
+ * answer says nothing about.
27
+ */
28
+ export declare const intactIntrinsicPrototypeKeysType: (context: IntrinsicContext, intrinsic: string, keys: PrototypeKeyQuery, location: ts.Node) => ts.Type | null;
29
+ /**
30
+ * `GEA_LEDGER_DEBUG=1` text only, never consulted for the compiler's own
31
+ * answer: WHICH of the census's taint sources is the reason a whole-prototype
32
+ * or per-key obligation fails -- `*` (some receiver the census could not
33
+ * attribute to any object at all), a SURFACE write (a receiver that might be
34
+ * this intrinsic but was not proved to be exactly it), or an OBJECT write
35
+ * (recorded against this intrinsic's own constructor or prototype identity).
36
+ * `intactIntrinsicPrototypeType`/`intactIntrinsicPrototypeKeysType` answer
37
+ * only pass/fail; this re-walks the same resolution to name which of the
38
+ * three the failure came from, so `[LEDGER]`'s publish-time line (WHERE a
39
+ * requirement was raised) can be paired with WHY the final census refused it.
40
+ */
41
+ export declare const explainIntrinsicProtocolFailure: (context: IntrinsicContext, intrinsic: string, location: ts.Node, keys: PrototypeKeyQuery | "all") => string;
@@ -0,0 +1,87 @@
1
+ import ts from 'typescript';
2
+ import { intrinsicObjectKeysIntact, keySetTouches, prototypeKeyQuerySignature } from './host-mutation-keys.js';
3
+ const prototypeTypeOf = (context, intrinsic, location, intact) => {
4
+ const { checker, identities, globalHostMutationTaint: mutations, isStandardLibraryDeclaration } = context;
5
+ if (mutations.has('*') || !isStandardLibraryDeclaration)
6
+ return null;
7
+ const symbol = checker.resolveName(intrinsic, location, ts.SymbolFlags.Value, false);
8
+ if (!symbol?.valueDeclaration || !isStandardLibraryDeclaration(symbol.valueDeclaration))
9
+ return null;
10
+ const declaration = identities.symbolValueDeclarationId(symbol, location);
11
+ const constructor = checker.getTypeOfSymbolAtLocation(symbol, location);
12
+ const prototype = constructor.getProperty('prototype');
13
+ if (!prototype?.declarations?.length || !prototype.declarations.every(isStandardLibraryDeclaration))
14
+ return null;
15
+ const prototypeId = identities.symbolDeclarationId(prototype);
16
+ return declaration !== null && prototypeId !== null && intact(declaration, prototypeId)
17
+ ? checker.getTypeOfSymbolAtLocation(prototype, location)
18
+ : null;
19
+ };
20
+ /**
21
+ * The WHOLE-object question: nothing at all was recorded against the
22
+ * intrinsic's constructor binding or its prototype, and no key was written
23
+ * through a receiver that might be any intrinsic. Prototype mutation is
24
+ * recorded on its identity, including writes through aliases. Prefer
25
+ * `intactIntrinsicPrototypeKeysType`: this answer fails under any single
26
+ * key write anywhere the census could not attribute.
27
+ */
28
+ export const intactIntrinsicPrototypeType = (context, intrinsic, location) => prototypeTypeOf(context, intrinsic, location, (constructor, prototype) => !context.globalHostMutationTaint.has(constructor) && intrinsicObjectKeysIntact(context.globalHostMutationTaint, prototype, 'all'));
29
+ /**
30
+ * The PER-KEY question: the intrinsic's prototype is still the one the
31
+ * standard library declares for every key in `keys` -- none of them was
32
+ * added, replaced or deleted on it, directly, through an alias, or through a
33
+ * receiver that might be any intrinsic -- and the constructor binding that
34
+ * names it was neither replaced nor had its `prototype` key written.
35
+ *
36
+ * `keys` must list every key the caller's proof reads from the prototype:
37
+ * a key it proves ABSENT (`{ names: ['glslVersion'] }` for "Object.prototype
38
+ * lacks `glslVersion`"), every method a plan calls, `arrayIndices` when a
39
+ * hole read falls through to the prototype. A key left out is a key the
40
+ * answer says nothing about.
41
+ */
42
+ export const intactIntrinsicPrototypeKeysType = (context, intrinsic, keys, location) => prototypeTypeOf(context, intrinsic, location, (constructor, prototype) => intrinsicObjectKeysIntact(context.globalHostMutationTaint, constructor, { names: ['prototype'] }) &&
43
+ intrinsicObjectKeysIntact(context.globalHostMutationTaint, prototype, keys));
44
+ /**
45
+ * `GEA_LEDGER_DEBUG=1` text only, never consulted for the compiler's own
46
+ * answer: WHICH of the census's taint sources is the reason a whole-prototype
47
+ * or per-key obligation fails -- `*` (some receiver the census could not
48
+ * attribute to any object at all), a SURFACE write (a receiver that might be
49
+ * this intrinsic but was not proved to be exactly it), or an OBJECT write
50
+ * (recorded against this intrinsic's own constructor or prototype identity).
51
+ * `intactIntrinsicPrototypeType`/`intactIntrinsicPrototypeKeysType` answer
52
+ * only pass/fail; this re-walks the same resolution to name which of the
53
+ * three the failure came from, so `[LEDGER]`'s publish-time line (WHERE a
54
+ * requirement was raised) can be paired with WHY the final census refused it.
55
+ */
56
+ export const explainIntrinsicProtocolFailure = (context, intrinsic, location, keys) => {
57
+ const { checker, identities, globalHostMutationTaint: taint, isStandardLibraryDeclaration } = context;
58
+ if (taint.has('*'))
59
+ return '*';
60
+ if (!isStandardLibraryDeclaration)
61
+ return 'no-standard-library-check';
62
+ const symbol = checker.resolveName(intrinsic, location, ts.SymbolFlags.Value, false);
63
+ if (!symbol?.valueDeclaration || !isStandardLibraryDeclaration(symbol.valueDeclaration))
64
+ return 'unresolved-intrinsic';
65
+ const declaration = identities.symbolValueDeclarationId(symbol, location);
66
+ const constructor = checker.getTypeOfSymbolAtLocation(symbol, location);
67
+ const prototypeSymbol = constructor.getProperty('prototype');
68
+ if (!prototypeSymbol?.declarations?.length || !prototypeSymbol.declarations.every(isStandardLibraryDeclaration))
69
+ return 'unresolved-prototype';
70
+ const prototypeId = identities.symbolDeclarationId(prototypeSymbol);
71
+ if (declaration === null || prototypeId === null)
72
+ return 'unresolved-identity';
73
+ if (keySetTouches(taint.surfaceKeys, keys))
74
+ return `surface:${keys === 'all' ? 'whole' : prototypeKeyQuerySignature(keys)}`;
75
+ if (keySetTouches(taint.keysOf(prototypeId), keys))
76
+ return `object:prototype:${keys === 'all' ? 'whole' : prototypeKeyQuerySignature(keys)}`;
77
+ if (keys !== 'all' && keySetTouches(taint.surfaceKeys, { names: ['prototype'] }))
78
+ return 'surface:prototype-replaced';
79
+ if (keys !== 'all' && keySetTouches(taint.keysOf(declaration), { names: ['prototype'] }))
80
+ return 'object:constructor:prototype-replaced';
81
+ // The legacy whole-object question (`intactIntrinsicPrototypeType`) also
82
+ // fails when ANYTHING was ever recorded against the constructor's own
83
+ // identity, independent of key -- coarser than the per-key checks above.
84
+ if (taint.has(declaration) || taint.has(prototypeId))
85
+ return 'object:legacy-whole';
86
+ return 'intact';
87
+ };
@@ -0,0 +1,14 @@
1
+ import type ts from 'typescript';
2
+ import type { ProducerContext } from './producer-context.js';
3
+ type IntrinsicContext = Pick<ProducerContext, 'checker' | 'identities' | 'globalHostMutationTaint' | 'isStandardLibraryDeclaration'>;
4
+ /** Shared static-member identity and sealed mutation authority. Constructor
5
+ * value declarations and static member declarations have distinct identities;
6
+ * instance-interface augmentation does not replace a constructor static.
7
+ *
8
+ * Per key: the owner must not have had THIS member's key written (directly,
9
+ * or through a receiver that might be any intrinsic) nor its binding
10
+ * replaced, and the member declaration itself must not have been replaced.
11
+ * A write of some other key on the owner says nothing about this member.
12
+ */
13
+ export declare const intrinsicStaticMemberIsIntact: (context: IntrinsicContext, owner: ts.Symbol | undefined, member: ts.Symbol | undefined, location: ts.Node) => boolean;
14
+ export {};
@@ -0,0 +1,23 @@
1
+ import { intrinsicObjectKeysIntact } from './host-mutation-keys.js';
2
+ /** Shared static-member identity and sealed mutation authority. Constructor
3
+ * value declarations and static member declarations have distinct identities;
4
+ * instance-interface augmentation does not replace a constructor static.
5
+ *
6
+ * Per key: the owner must not have had THIS member's key written (directly,
7
+ * or through a receiver that might be any intrinsic) nor its binding
8
+ * replaced, and the member declaration itself must not have been replaced.
9
+ * A write of some other key on the owner says nothing about this member.
10
+ */
11
+ export const intrinsicStaticMemberIsIntact = (context, owner, member, location) => {
12
+ if (!owner?.valueDeclaration || !member?.declarations?.length)
13
+ return false;
14
+ if (![owner.valueDeclaration, ...member.declarations].every((declaration) => context.isStandardLibraryDeclaration?.(declaration) === true))
15
+ return false;
16
+ const ownerId = context.identities.symbolValueDeclarationId(owner, location);
17
+ const memberId = context.identities.symbolDeclarationId(member);
18
+ const taint = context.globalHostMutationTaint;
19
+ return (ownerId !== null &&
20
+ memberId !== null &&
21
+ !taint.has(memberId) &&
22
+ intrinsicObjectKeysIntact(taint, ownerId, { names: [member.getName()] }));
23
+ };