@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,737 @@
1
+ import { implicitArgumentsSlotOf } from './implicit-arguments.js';
2
+ import ts from 'typescript';
3
+ import { emptyParameterBindingCensus } from './parameter-bindings.js';
4
+ import { emptyCollectionBindingCensus } from './collection-bindings.js';
5
+ import { bagReturnTypeOf, bagShapeTypeAt, emptyObjectBagCensus } from './object-bag-bindings.js';
6
+ import { accessorPassthroughMemberTargetOf, emptyDeclaredMemberCensus, literalAccessorOf, physicalInitializerTypeOf } from './structural-declarations.js';
7
+ import { parameterSlotTypeOf, restParameterArrayTypeOf, restParameterUnionOfTuplesElementTypeOf, impliedPatternArrayElementAt } from './parameter-slot.js';
8
+ import { isUnusableEvidence } from './derived-expression-type.js';
9
+ import { inferredArrayElementAt, inferredCollectionTypeArgumentsAt } from './structural-array-element.js';
10
+ /**
11
+ * Only the standard library's bind protocol describes a synthetic flattened
12
+ * entry. Its instantiated A/B tuples name captured arguments and the native
13
+ * bound wrapper's remaining scalar slots; they do not name a source body's
14
+ * rest container. This also covers the callable type in bind's `this` slot.
15
+ *
16
+ * An ordinary declaration, including a generic or a callable type annotation,
17
+ * keeps one rest parameter even when its tuple has a statically known length.
18
+ * Tuple cardinality alone is never evidence for changing a physical ABI.
19
+ */
20
+ const isBuiltinBindParameter = (declaration) => {
21
+ if (!declaration.getSourceFile().hasNoDefaultLib)
22
+ return false;
23
+ let owner = declaration.parent;
24
+ while (owner && !ts.isMethodSignature(owner))
25
+ owner = owner.parent;
26
+ return (owner !== undefined &&
27
+ ts.isMethodSignature(owner) &&
28
+ ts.isIdentifier(owner.name) &&
29
+ owner.name.text === 'bind' &&
30
+ ts.isInterfaceDeclaration(owner.parent) &&
31
+ (owner.parent.name.text === 'CallableFunction' || owner.parent.name.text === 'NewableFunction'));
32
+ };
33
+ const closedRestTupleElementsAt = (checker, declaration, declared) => {
34
+ if (declaration.dotDotDotToken === undefined || declaration.type === undefined || !isBuiltinBindParameter(declaration))
35
+ return null;
36
+ if (!checker.isTupleType(declared))
37
+ return null;
38
+ const reference = declared;
39
+ const target = reference.target;
40
+ const elements = checker.getTypeArguments(reference);
41
+ const flagsAt = (index) => target.elementFlags[index] ?? ts.ElementFlags.Required;
42
+ if (elements.some((_, index) => (flagsAt(index) & (ts.ElementFlags.Rest | ts.ElementFlags.Variadic)) !== 0))
43
+ return null;
44
+ return elements.map((element, index) => ({ type: element, optional: (flagsAt(index) & ts.ElementFlags.Optional) !== 0 }));
45
+ };
46
+ /**
47
+ * A type the checker INVENTED for an object literal, as opposed to one the
48
+ * program named. Anonymous alone is not enough -- a type alias to a type
49
+ * literal is anonymous too, and it IS a name the program wrote -- so the
50
+ * literal's own declaration is what identifies it.
51
+ */
52
+ const inferredObjectLiteralType = (type) => {
53
+ if ((type.flags & ts.TypeFlags.Object) === 0)
54
+ return false;
55
+ if ((type.objectFlags & ts.ObjectFlags.Anonymous) === 0)
56
+ return false;
57
+ return (type.symbol?.declarations ?? []).some(ts.isObjectLiteralExpression);
58
+ };
59
+ /** `GEA_MEMBER_DEBUG=<member>` reports which of the three sources answered that one member. */
60
+ const memberDebug = process.env['GEA_MEMBER_DEBUG'];
61
+ export const createStructuralParts = (input) => {
62
+ const { checker, identities, typeOf, implicitReceiverOf, declaredMemberSignatureOf, keyOfSymbol, internArray } = input;
63
+ const declaredMembers = input.declaredMembers ?? emptyDeclaredMemberCensus;
64
+ const parameters = input.parameters ?? emptyParameterBindingCensus;
65
+ const collections = input.collections ?? emptyCollectionBindingCensus;
66
+ const table = input.table ?? null;
67
+ const bags = input.bags ?? emptyObjectBagCensus;
68
+ const minimumArityOf = (signature) => {
69
+ const parameters = signature.getParameters();
70
+ let required = 0;
71
+ for (const parameter of parameters) {
72
+ const declaration = identities.declarationOfSymbol(parameter);
73
+ if (!declaration || !ts.isParameter(declaration))
74
+ break;
75
+ if (checker.isOptionalParameter(declaration) || declaration.dotDotDotToken)
76
+ break;
77
+ required += 1;
78
+ }
79
+ return required;
80
+ };
81
+ /**
82
+ * The type of a symbol, asked at a declaration when it has one.
83
+ *
84
+ * A signature's parameter symbol does not always have a declaration: an
85
+ * *inferred* signature -- what JavaScript sources reach the checker as, and
86
+ * what a union or instantiation of signatures synthesizes -- carries parameter
87
+ * symbols the checker minted rather than parsed. There is no node to ask at,
88
+ * and there used to be no answer for that: the symbol itself was cast to a
89
+ * node and handed to `getTypeOfSymbolAtLocation`, which reads `location.parent`
90
+ * and crashed inside TypeScript on `Cannot read properties of undefined
91
+ * (reading 'kind')`. Every candidate whose type reached one of those
92
+ * signatures was blocked by a producer failure -- 496 of the three.js app's, 392 of
93
+ * three-angle-metal's -- because three.js is compiled from source and its
94
+ * signatures are inferred, not declared.
95
+ *
96
+ * `getTypeOfSymbol` is the location-free form of the same question and the
97
+ * right one to ask when there is no location; `structural-indexed-access.ts`
98
+ * already asks it that way. The located form stays wherever a declaration
99
+ * exists, because a location is what resolves a `this` type and narrows a
100
+ * parameter to the site being asked about.
101
+ *
102
+ * Deliberately checker-only, not routed through `censusedTypeAt`: this asks
103
+ * about a SYMBOL, not a node, and every real call site already gates its use
104
+ * behind a census check of its own (`parameterOf`'s `bound = ... parameters.
105
+ * typeAt(declaration)`, `memberOf`'s `fromCensus`/`censusResult` above) --
106
+ * this is the shared fallback primitive those sites reach for only once the
107
+ * census has already had, and declined, first say.
108
+ */
109
+ const typeOfSymbolAt = (symbol, location) => location ? checker.getTypeOfSymbolAtLocation(symbol, location) : checker.getTypeOfSymbol(symbol);
110
+ /**
111
+ * `parameterOf` for exactly one element of a rest parameter's
112
+ * INSTANTIATED type, once `closedRestTupleElementsAt` (below) has already
113
+ * proved that instantiation is a settled, closed tuple rather than an open
114
+ * array -- `signatureOf`'s expansion caller, never `parameterOf` itself,
115
+ * decides WHEN this applies.
116
+ *
117
+ * Deliberately bypasses every declaration-derived branch `parameterOf`
118
+ * otherwise walks (the census, `restParameterArrayTypeOf`, the phantom/
119
+ * union-of-tuples widenings): those all answer "what does the WHOLE rest
120
+ * parameter hold", and a closed tuple's Nth element is a plain, ordinary
121
+ * slot with its own settled type -- exactly the fact `tupleElementsOf`
122
+ * already publishes for a tuple met anywhere else in this module. The one
123
+ * piece still shared with an ordinary parameter is the absence widening
124
+ * (`parameterSlotTypeOf`): an optional trailing tuple element still has to
125
+ * hold `undefined` when the call omits it.
126
+ */
127
+ const parameterOfTupleElement = (element) => {
128
+ const flags = { optional: element.optional, rest: false, hasInitializer: false };
129
+ const type = typeOf(element.type);
130
+ return { type, slot: parameterSlotTypeOf(input.internUnion, typeOf(checker.getUndefinedType()), flags, type), ...flags };
131
+ };
132
+ const parameterOf = (parameter, forceRest = false) => {
133
+ const declaration = identities.declarationOfSymbol(parameter);
134
+ const isParameter = declaration !== null && ts.isParameter(declaration);
135
+ const bound = isParameter ? parameters.typeAt(declaration) : null;
136
+ const boundArms = isParameter ? parameters.unionArmsAt(declaration) : null;
137
+ // The published ABI and the body it wraps read the SAME rest parameter --
138
+ // see `parameter-slot.ts`'s `restParameterArrayTypeOf`, which the body's
139
+ // own binding (`structural.ts`'s `typeAt`) already consults. Asked here,
140
+ // ahead of the raw checker fallback, so a rest parameter's SLOT never
141
+ // publishes the closed tuple the body itself was never bound to.
142
+ //
143
+ // `restParameterArrayTypeOf` returns the tuple's widened ELEMENT type --
144
+ // its own doc says so ("The array's element type is `widestOf` ...") --
145
+ // not the array. `structural.ts`'s `typeAt` (the body-side reference to
146
+ // this same parameter) already wraps that element into an `array` shape
147
+ // rather than publishing it bare; this is that same wrap, so the
148
+ // signature's declared parameter type and the body's own binding of it
149
+ // agree, and `derive.ts`'s `abiOf` -- which trusts a rest parameter's
150
+ // slot is already the Array the language binds it to -- finds one there.
151
+ const restArray = isParameter ? restParameterArrayTypeOf(checker, declaration) : null;
152
+ // Real call-site evidence for an UNANNOTATED rest parameter --
153
+ // `parameter-bindings.ts`'s `restElementTypeAt`, joined over every
154
+ // reachable caller's actual arguments at or past this parameter's own
155
+ // ordinal -- outranks `restArray`'s bare checker-tuple widening exactly
156
+ // as `bound` already outranks it for the reasons stated below: it is a
157
+ // fact about what callers actually pass, not a guess reconstructed from
158
+ // a contextual type. Gated to `bound === null` because a rest parameter
159
+ // is never itself a `bound` candidate (`isUnannotated` refuses it, see
160
+ // that function's own doc), so this is the one real "the census bound
161
+ // this rest parameter" answer that exists.
162
+ const censusRestElement = isParameter && declaration.dotDotDotToken !== undefined && bound === null
163
+ ? (parameters.restElementTypeAt?.(declaration) ?? null)
164
+ : null;
165
+ const declared = bound ?? typeOfSymbolAt(parameter, declaration ?? parameter.valueDeclaration);
166
+ const flags = {
167
+ optional: isParameter ? checker.isOptionalParameter(declaration) && declaration.initializer === undefined : false,
168
+ rest: forceRest || (isParameter ? declaration.dotDotDotToken !== undefined : false),
169
+ hasInitializer: isParameter ? declaration.initializer !== undefined : false
170
+ };
171
+ // `bound` (the parameter binding census) outranks `restArray` exactly as
172
+ // it did before this wrap existed -- when the census has already bound
173
+ // this declaration, that answer is shared with the body and is never the
174
+ // bare tuple-derived element `restParameterArrayTypeOf` produces.
175
+ //
176
+ // A THIRD rest-parameter shape neither of the two branches above covers:
177
+ // `...args: any`, an EXPLICIT annotation, so `restParameterArrayTypeOf`
178
+ // (gated to `declaration.type === undefined`) never runs, and `bound`
179
+ // has nothing published for a declaration this census does not bind.
180
+ // `declared` is then the checker's own answer at the parameter symbol --
181
+ // and for a rest parameter TypeScript lets the program spell `any`
182
+ // instead of `any[]`, the checker reports the symbol's type back exactly
183
+ // as written: bare `any`, never wrapped in an array. `abi.ts`'s
184
+ // `derive.ts` (`abiOf`) has one primitive for a rest slot, `array`, so a
185
+ // bare `any` reaching it derives to plain `dynamic` and every call that
186
+ // spreads a real array into it refuses to pack -- hono's `mount()`
187
+ // (`hono-base.ts`) forwards `...getOptions(c)`, a genuine `unknown[]`,
188
+ // into `applicationHandler: (request, ...args: any) => ...` this exact
189
+ // way. A rest parameter is ALWAYS the array ECMAScript's own
190
+ // `FunctionDeclarationInstantiation` binds it to (see this file's
191
+ // `parameterSlotTypeOf` sibling comment for the identical fact about the
192
+ // UNANNOTATED case) -- an explicit `any` describes the ELEMENT the
193
+ // program declined to narrow, never the container, so it is wrapped
194
+ // rather than left bare: `array<dynamic>` is what the value physically
195
+ // is, and boxing the whole parameter to avoid saying so is the same
196
+ // shortcut CLAUDE.md's carve-out never licenses for a container.
197
+ // A THIRD form an EXPLICITLY ANNOTATED rest parameter takes, alongside the
198
+ // bare-`any` fallback below: a union of tuples -- `...args: [] | [TNext]`,
199
+ // `lib.es2015.generator.d.ts`'s own spelling of `Generator.next`'s "zero or
200
+ // one argument". `restArray` above never fires here (it is gated to the
201
+ // UNANNOTATED case), and neither `checker.isArrayType` nor
202
+ // `checker.isTupleType` is true of the union itself, so without this the
203
+ // program falls straight into `restNotArrayShaped` and wraps the WHOLE
204
+ // union as if it were one element -- see
205
+ // `parameter-slot.ts`'s `restParameterUnionOfTuplesElementTypeOf` for the
206
+ // emission refusal that produces.
207
+ const restUnionOfTuples = isParameter && flags.rest && bound === null ? restParameterUnionOfTuplesElementTypeOf(checker, declared) : null;
208
+ // A constrained type parameter already denotes its container. `typeOf`
209
+ // follows that constraint for the body's binding too; wrapping T again
210
+ // here would publish Array<Array<number>> for T extends [number, number].
211
+ const restContainer = flags.rest ? (checker.getBaseConstraintOfType(declared) ?? declared) : declared;
212
+ const restNotArrayShaped = flags.rest &&
213
+ bound === null &&
214
+ restArray === null &&
215
+ restUnionOfTuples === null &&
216
+ !checker.isArrayType(restContainer) &&
217
+ !checker.isTupleType(restContainer);
218
+ // The destructured-parameter twin of the rest wrap below -- one function
219
+ // (`impliedPatternArrayElementAt`) answers it for the body's own binding
220
+ // (`structural.ts`'s `typeAt`) and for this slot, so the two agree.
221
+ const impliedElement = isParameter ? impliedPatternArrayElementAt(checker, parameters, declaration) : null;
222
+ const overridden = isParameter
223
+ ? (input.parameterOverrideAt?.(declaration) ?? (table ? bagShapeTypeAt(table, typeOf, bags, declaration) : null))
224
+ : null;
225
+ const type = overridden
226
+ ? overridden
227
+ : impliedElement
228
+ ? internArray(typeOf(impliedElement))
229
+ : boundArms
230
+ ? input.internUnion(boundArms.map(typeOf))
231
+ : censusRestElement !== null
232
+ ? internArray(typeOf(censusRestElement))
233
+ : bound === null && restUnionOfTuples !== null
234
+ ? internArray(typeOf(restUnionOfTuples))
235
+ : bound === null && restArray !== null
236
+ ? internArray(typeOf(restArray))
237
+ : restNotArrayShaped
238
+ ? internArray(typeOf(declared))
239
+ : typeOf(declared);
240
+ // The slot widens the SAME type the body binds -- the census's answer when
241
+ // it has one, the checker's otherwise -- for the reason stated on the
242
+ // `parameters` field above: one census, both ends, one answer.
243
+ return { type, slot: parameterSlotTypeOf(input.internUnion, typeOf(checker.getUndefinedType()), flags, type), ...flags };
244
+ };
245
+ /**
246
+ * `resultOverride` is how an optional call's callee gets the return its method
247
+ * actually has: the checker's resolved signature carries the chain's added
248
+ * `undefined`, which is a fact about the call expression and not about the
249
+ * function being called (`producers/optional-chain.ts`).
250
+ */
251
+ const signatureOf = (signature, resultOverride) => {
252
+ const thisParameter = signature.thisParameter;
253
+ const written = thisParameter ? typeOfSymbolAt(thisParameter, thisParameter.valueDeclaration) : null;
254
+ const declaration = signature.getDeclaration();
255
+ const receiver = written ?? (declaration ? implicitReceiverOf(declaration) : null);
256
+ // The checker gives a union call signature its first declaration, but that
257
+ // declaration does not own every possible method receiver. Preserve the
258
+ // component receivers before publishing one physical callable convention.
259
+ // An explicit `this` remains the checker's own resolved constraint.
260
+ const composite = signature;
261
+ const implicitReceivers = written === null && composite.compositeKind === ts.TypeFlags.Union
262
+ ? (composite.compositeSignatures ?? []).flatMap((part) => {
263
+ const own = part.getDeclaration();
264
+ const implicit = own ? implicitReceiverOf(own) : null;
265
+ return implicit ? [typeOf(implicit)] : [];
266
+ })
267
+ : [];
268
+ const receiverType = implicitReceivers.length > 0 ? input.internUnion(implicitReceivers) : receiver ? typeOf(receiver) : null;
269
+ // The return census (`return-bindings.ts`, composed into `parameters` by
270
+ // `withReturnBindings`/`composeReturnBindings` -- see this file's own
271
+ // `parameters` field doc) answers exactly this question for a function
272
+ // DECLARATION, not only for a call site: `ReturnBindingCensus.typeAt`
273
+ // special-cases `isReturnCandidateKind(node)` to return its own bound
274
+ // answer straight from the declaration. `parameterOf` above already asks
275
+ // the same composed census for every parameter (`parameters.typeAt(declaration)`);
276
+ // the result was the one slot of a signature that never asked at all --
277
+ // reaching for the checker's raw, un-narrowed `signature.getReturnType()`
278
+ // even where the census had already resolved the join of the function's
279
+ // own `return` statements. That is the two-authorities defect this module's
280
+ // header describes for parameters, recurring at the result: a value used as
281
+ // a first-class callable (an object literal's method value, a dispatch-table
282
+ // entry) gets its ABI from THIS function, and an unconsulted census here is
283
+ // exactly what makes `abi.result` publish `dynamic` for a function the
284
+ // census already typed. `resultOverride` still wins outright -- it is a
285
+ // fact about the CALL, not the callee, and the census has nothing to say
286
+ // about it.
287
+ const checkerResult = signature.getReturnType();
288
+ // The RESULT half of the same store `implicitReceiverOf` answers the
289
+ // receiver half of, and it outranks every source below because it IS the
290
+ // slot: a contextually typed object literal is laid out as the declared
291
+ // type (`structural-layout-type.ts`), so its `next` field's carrier is
292
+ // built from `TypedCursor`'s `next(): TypedStep`, while the literal's own
293
+ // unannotated `next() { return { value: 0, done: true } }` derived an
294
+ // ANONYMOUS record of identical shape but different interned identity --
295
+ // two conventions for one member, and no conversion between a named record
296
+ // and an anonymous one (`typed-custom-iterator-close.ts`, both directions:
297
+ // the cursor factory's result and the step's).
298
+ //
299
+ // Gated on the literal method annotating NO return type of its own: a
300
+ // written annotation is the program's own statement about this
301
+ // declaration and still wins, and a declared member with no annotation
302
+ // either leaves both sides on the inference they already shared.
303
+ const declaredMemberResult = (() => {
304
+ if (resultOverride !== undefined || !declaration)
305
+ return null;
306
+ if (!ts.isMethodDeclaration(declaration) || declaration.type !== undefined)
307
+ return null;
308
+ if (!ts.isObjectLiteralExpression(declaration.parent))
309
+ return null;
310
+ const member = declaredMemberSignatureOf(declaration, declaration.parent);
311
+ if (!member || member.type === undefined)
312
+ return null;
313
+ return checker.getSignatureFromDeclaration(member)?.getReturnType() ?? null;
314
+ })();
315
+ // The same statement as `declaredMemberResult` above, one level out: a
316
+ // function LITERAL written straight into a slot whose declared type states
317
+ // the result. The literal annotates no return type of its own, so the
318
+ // slot's statement is the only one the program makes, and the literal's
319
+ // inference of an ANONYMOUS record where the slot names `Events` is two
320
+ // identities for one value -- with no conversion between them, and none
321
+ // possible, because the target is a UNION and a value only widens into a
322
+ // union by already BEING one of its arms. `() => ({ onOpen: () => 2 })`
323
+ // against `((c: Ctx) => Events) | Ctx | Events | number` is the measured
324
+ // case: the argument published `() -> record#<literal>`, and certification
325
+ // refused both the widening of that callable into the tagged union and the
326
+ // store of the body's `Events` into the arrow's own record return slot --
327
+ // two refusals, one disagreement. The identical arrow written
328
+ // `(): Events => ...` certified, which is what named the RESULT as the one
329
+ // slot at fault: the parameter lists never mattered.
330
+ //
331
+ // Union slots only. A non-union slot already reaches the value through
332
+ // `declaredValueTypeOf` (a named binding) or through an ordinary callable
333
+ // conversion, neither of which this may pre-empt. One assignable arm with
334
+ // one call signature only -- two callable arms is a choice this cannot
335
+ // make, and the literal's own inference remains the answer.
336
+ //
337
+ // NARROWED TO THE IDENTITY QUESTION, because a slot's result is not always
338
+ // a restatement of the literal's own: measured over the 342 runtime
339
+ // programs, the rule without the shape test below also fires on every
340
+ // `.then` callback, whose slot result is the WIDER `T | PromiseLike<T>`,
341
+ // and on one slot result of `any`. Adopting either would be a widening --
342
+ // a boxed carrier in the `any` case -- not an identity correction. So it
343
+ // applies only where the literal RETURNS AN OBJECT LITERAL whose inferred
344
+ // type is anonymous and the slot names a record that literal already
345
+ // satisfies: the same shape under two identities, which is the whole
346
+ // defect and the only thing no conversion can bridge. With that test: one
347
+ // site across the 342 runtime programs and none across the 158 corpus
348
+ // fixtures.
349
+ const contextualSlotResult = (() => {
350
+ if (resultOverride !== undefined || !declaration)
351
+ return null;
352
+ if (!ts.isArrowFunction(declaration) && !ts.isFunctionExpression(declaration))
353
+ return null;
354
+ if (declaration.type !== undefined)
355
+ return null;
356
+ const contextual = checker.getContextualType(declaration);
357
+ if (!contextual || !contextual.isUnion())
358
+ return null;
359
+ const own = checker.getTypeAtLocation(declaration);
360
+ const arms = contextual.types.filter((member) => member.getCallSignatures().length === 1 && checker.isTypeAssignableTo(own, member));
361
+ const stated = arms.length === 1 ? arms[0]?.getCallSignatures()[0] : undefined;
362
+ if (!stated)
363
+ return null;
364
+ const slot = checker.getReturnTypeOfSignature(stated);
365
+ if (slot === checkerResult || slot.isUnion() || (slot.flags & ts.TypeFlags.Object) === 0)
366
+ return null;
367
+ if (!inferredObjectLiteralType(checkerResult) || !checker.isTypeAssignableTo(checkerResult, slot))
368
+ return null;
369
+ return slot;
370
+ })();
371
+ const censusResult = declaration ? parameters.typeAt(declaration) : null;
372
+ const censusUnionArms = resultOverride === undefined && declaration ? parameters.unionArmsAt(declaration) : null;
373
+ const bagResult = resultOverride === undefined && declaration && table ? bagReturnTypeOf(table, typeOf, bags, declaration) : null;
374
+ const collectionResult = (() => {
375
+ if (resultOverride !== undefined || !declaration || !table)
376
+ return null;
377
+ const expressions = [];
378
+ const visit = (node) => {
379
+ if (node !== declaration && ts.isFunctionLike(node))
380
+ return;
381
+ if (ts.isReturnStatement(node)) {
382
+ if (node.expression)
383
+ expressions.push(node.expression);
384
+ return;
385
+ }
386
+ ts.forEachChild(node, visit);
387
+ };
388
+ if (ts.isArrowFunction(declaration) && !ts.isBlock(declaration.body))
389
+ expressions.push(declaration.body);
390
+ else {
391
+ const body = ts.isFunctionDeclaration(declaration) ||
392
+ ts.isFunctionExpression(declaration) ||
393
+ ts.isArrowFunction(declaration) ||
394
+ ts.isMethodDeclaration(declaration) ||
395
+ ts.isConstructorDeclaration(declaration) ||
396
+ ts.isGetAccessorDeclaration(declaration) ||
397
+ ts.isSetAccessorDeclaration(declaration)
398
+ ? declaration.body
399
+ : undefined;
400
+ if (body)
401
+ visit(body);
402
+ }
403
+ if (expressions.length === 0)
404
+ return null;
405
+ let agreed = null;
406
+ for (const expression of expressions) {
407
+ const inferred = inferredCollectionTypeArgumentsAt(collections, table, typeOf, bags, checker.getTypeAtLocation(expression), expression);
408
+ if (inferred === null || (agreed !== null && inferred !== agreed))
409
+ return null;
410
+ agreed = inferred;
411
+ }
412
+ return agreed;
413
+ })();
414
+ // An `async` function's own declared type really IS `Promise<T>` -- this
415
+ // used to unwrap it to `T` here via `checker.getAwaitedType`, making
416
+ // every async function compile as an ordinary synchronous function. That
417
+ // was scaffolding for an earlier false-certification patch (see
418
+ // `.scratch/HANDOVER-2026-08-31-session3.md`), not the target design; it
419
+ // is reverted now that `promise` is a real, statically-typed carrier
420
+ // (`representation/derive.ts`'s `PromiseDeclarationPolicy`). `await`
421
+ // still unwraps at its own site (`contributeAwait`,
422
+ // `producers/control.ts`), which is the only place ECMAScript actually
423
+ // performs this unwrap -- see citations.md finding 2.
424
+ const signatureParameters = signature.getParameters();
425
+ const phantomIndex = implicitArgumentsSlotOf(signature)?.ordinal ?? null;
426
+ // A JSDoc closure-style function type (`function(this: T, ...number):
427
+ // string`, the shape `@returns` synthesizes for an ABI-recovery callback)
428
+ // parses its rest parameter into a plain `ts.ParameterDeclaration` with NO
429
+ // `dotDotDotToken` -- there is no `...` token to parse, because the
430
+ // rest-ness is spelled by the JSDoc tag, not by punctuation on a real
431
+ // parameter list. `parameterOf`'s `rest` flag reads `dotDotDotToken`
432
+ // directly and was therefore blind to this shape, silently deriving a
433
+ // FIXED array-typed parameter instead of a runtime-sized rest slot --
434
+ // `test/runtime/dynamic-callable-rest-adapter.runtime.js`'s
435
+ // `recoverMethodRest` return type lost its rest convention this way, and
436
+ // a later `formatted.call(receiver, 4, 5)` had no rest frame to pack `4`
437
+ // and `5` into. `ts.signatureHasRestParameter` is the checker's own
438
+ // semantic answer (it reads the parameter SYMBOL's rest flag, which the
439
+ // JSDoc parser does set), independent of which syntax produced the
440
+ // signature, so it is asked once per signature and applied to the last
441
+ // parameter exactly the way an explicit phantom rest is forced below.
442
+ // Not part of the public `typescript` `.d.ts` (unlike the checker-cast
443
+ // escape hatches elsewhere in this module for the same reason), so it is
444
+ // reached the same way: a narrow, optional-typed cast rather than `any`.
445
+ const hasRestParameter = ts
446
+ .signatureHasRestParameter;
447
+ const semanticRestIndex = hasRestParameter?.(signature) ? signatureParameters.length - 1 : -1;
448
+ // Expand only a checker-authenticated bind protocol tuple. A source
449
+ // function's tuple rest retains the container its body actually binds.
450
+ const parametersOf = (parameter, index) => {
451
+ const declaration = identities.declarationOfSymbol(parameter);
452
+ if (declaration && ts.isParameter(declaration)) {
453
+ // Mirrors `parameterOf`'s own `declared` precedence exactly (census
454
+ // answer first, the checker's otherwise) so this expansion decision
455
+ // and `parameterOf`'s single-parameter answer can never look at two
456
+ // different types for the same declaration.
457
+ const declared = parameters.typeAt(declaration) ?? typeOfSymbolAt(parameter, declaration);
458
+ const closedElements = closedRestTupleElementsAt(checker, declaration, declared);
459
+ if (closedElements !== null)
460
+ return closedElements.map(parameterOfTupleElement);
461
+ }
462
+ return [parameterOf(parameter, index === semanticRestIndex)];
463
+ };
464
+ const parameterShapes = phantomIndex === null
465
+ ? signatureParameters.flatMap(parametersOf)
466
+ : [
467
+ ...signatureParameters.slice(0, phantomIndex).flatMap(parametersOf),
468
+ parameterOf(signatureParameters[phantomIndex], true)
469
+ ];
470
+ // The census's arguments frame: a closed tuple when every body read names
471
+ // a fixed position (each position its own joined fact, the ones some
472
+ // caller omits optional), the runtime-sized Array of one element when the
473
+ // body indexes it at run time. See `implicit-arguments-tuple.ts`.
474
+ const implicitFrame = declaration && phantomIndex !== null ? parameters.implicitArgumentsTupleAt?.(declaration) : null;
475
+ if (implicitFrame && phantomIndex !== null) {
476
+ const parameter = parameterShapes[phantomIndex];
477
+ const type = implicitFrame.frame === 'array'
478
+ ? internArray(typeOf(implicitFrame.element))
479
+ : table?.intern({
480
+ kind: 'tuple',
481
+ readonly: false,
482
+ elements: implicitFrame.elements.map((element, position) => ({
483
+ type: typeOf(element),
484
+ optional: position >= implicitFrame.required,
485
+ rest: false,
486
+ variadic: false
487
+ }))
488
+ });
489
+ if (parameter && type !== undefined)
490
+ parameterShapes[phantomIndex] = { ...parameter, type, slot: type };
491
+ }
492
+ return {
493
+ parameters: parameterShapes,
494
+ minimumArity: minimumArityOf(signature),
495
+ // An explicit `this` is a type-system device, not an argument. Keeping it
496
+ // out of the parameter list is what stops it becoming a physical argument.
497
+ thisParameter: receiverType,
498
+ result: (declaredMemberResult ? typeOf(declaredMemberResult) : null) ??
499
+ (contextualSlotResult ? typeOf(contextualSlotResult) : null) ??
500
+ bagResult ??
501
+ collectionResult ??
502
+ (censusUnionArms ? input.internUnion(censusUnionArms.map(typeOf)) : typeOf(resultOverride ?? censusResult ?? checkerResult))
503
+ };
504
+ };
505
+ /**
506
+ * The expression a member's OWN declaration states its value from, when that
507
+ * declaration is one of the shapes `parameters` (the fully composed
508
+ * parameter+return+local+field census, despite the name -- see
509
+ * `frontend.ts`'s `compose`) already knows how to answer about: an object
510
+ * LITERAL property's initializer (`shaderID: shaderID` -- the identifier
511
+ * `shaderID` is exactly the node `local-bindings.ts` published an answer
512
+ * for), or a shorthand property's own name (`{ shaderID }`, which names the
513
+ * same outer binding). A class field's declaration is one one of its OWN
514
+ * writes -- `field-bindings.ts` already joins every write reaching the
515
+ * FIELD's symbol under one answer, so the declaration node itself, not its
516
+ * "value", is what should be asked; see the call site below.
517
+ */
518
+ const censusValueNodeOf = (declaration) => {
519
+ if (ts.isPropertyAssignment(declaration))
520
+ return declaration.initializer;
521
+ if (ts.isShorthandPropertyAssignment(declaration))
522
+ return declaration.name;
523
+ return null;
524
+ };
525
+ /** Accessor members currently being resolved through their passthrough target; see `memberOf`. */
526
+ const passthroughSeen = new Set();
527
+ /**
528
+ * `location` is a FALLBACK, never an override: a member with its own
529
+ * declaration is always asked at that declaration, and the borrowed location
530
+ * only ever answered for a member that has none. `null` is admitted because
531
+ * that borrowed answer is not always available and was never needed --
532
+ * `typeOfSymbolAt` asks the location-free question instead. See
533
+ * `structural.ts`'s declarationless-object branch.
534
+ */
535
+ const memberOf = (symbol, location) => {
536
+ if (memberDebug === symbol.name)
537
+ process.stderr.write(`\n[MEMBER-ENTER] ${symbol.name}\n`);
538
+ const key = keyOfSymbol(symbol);
539
+ if (!key)
540
+ return null;
541
+ // An accessor pair that does nothing but forward to another field IS that
542
+ // field, so it must be answered by the SAME authority -- this function,
543
+ // recursively -- rather than by its own annotation. See
544
+ // `accessorPassthroughMemberTargetOf`: three's `Texture.image` is
545
+ // `get image() { return this.source.data }` carrying `@type {?Object}`,
546
+ // and that upper bound otherwise wins outright over the census that knows
547
+ // the slot holds `Source.data`.
548
+ //
549
+ // Only the TYPE is taken from the target. `optional`, `readonly` and the
550
+ // accessor bodies stay this member's own, because those are facts about
551
+ // how the alias is spelled here, not about the storage behind it.
552
+ //
553
+ // `passthroughSeen` is a cycle guard, not an optimisation: a pair of
554
+ // accessors forwarding to each other is a program this must refuse rather
555
+ // than recurse forever on.
556
+ if (!passthroughSeen.has(symbol)) {
557
+ const target = accessorPassthroughMemberTargetOf(checker, symbol);
558
+ if (target) {
559
+ passthroughSeen.add(symbol);
560
+ try {
561
+ const forwarded = memberOf(target.symbol, target.declaration);
562
+ if (forwarded)
563
+ return { ...forwarded, key, accessor: literalAccessorOf(symbol, identities) ?? declaredMembers.accessorBodiesOf(symbol) };
564
+ }
565
+ finally {
566
+ passthroughSeen.delete(symbol);
567
+ }
568
+ }
569
+ }
570
+ const declaration = identities.declarationOfSymbol(symbol);
571
+ const checkerAnswer = typeOfSymbolAt(symbol, declaration ?? location ?? undefined);
572
+ // The checker answers an object-literal PROPERTY's or a class FIELD's own
573
+ // type by asking the checker DIRECTLY at the member's declaration -- a
574
+ // question the checker itself can only answer from what IT can see, which
575
+ // for `shaderID: shaderID` (the value an unannotated `x[k]` index read
576
+ // produced) or `this.morphTargetDictionary = Object.assign({}, ...)` (a
577
+ // self-referential write the checker's own JS inference gives up on) is
578
+ // `any`, even though `parameters` -- the SAME composed census `structural.ts`
579
+ // already threads through this module for PARAMETER declarations
580
+ // (`parameterOf` above) -- has a real, better answer for the identical
581
+ // symbol via `local-bindings.ts`/`field-bindings.ts`. Consulted only as a
582
+ // FALLBACK, and only past the checker's own unusable-evidence gate: a
583
+ // checker answer that IS usable is never second-guessed here, the same
584
+ // discipline `parameter-bindings.ts`'s own `known()` keeps for a bound
585
+ // parameter's narrowed use.
586
+ const censusNode = declaration ? (censusValueNodeOf(declaration) ?? declaration) : null;
587
+ const fromCensus = isUnusableEvidence(checkerAnswer) && censusNode ? parameters.typeAt(censusNode) : null;
588
+ // Which of the three sources actually answered one named member. A record
589
+ // that carries ONE dynamic field among 130 gives the reader no way to tell
590
+ // "the checker was fine" from "the census had nothing to add".
591
+ if (memberDebug === symbol.name) {
592
+ const where = censusNode?.getSourceFile();
593
+ process.stderr.write(`[MEMBER] ${symbol.name} checker=${checker.typeToString(checkerAnswer)} unusable=${isUnusableEvidence(checkerAnswer)} ` +
594
+ `censusNode=${censusNode ? ts.SyntaxKind[censusNode.kind] : 'none'}@${where ? `${where.fileName.split('/').pop()}:${where.getLineAndCharacterOfPosition(censusNode.getStart()).line + 1}` : '-'} ` +
595
+ `fromCensus=${fromCensus ? checker.typeToString(fromCensus) : 'null'}\n`);
596
+ }
597
+ // A STATED ANNOTATION THAT WAS ONLY EVER AN UPPER BOUND, and -- exactly as
598
+ // in `structural-layout-type.ts`'s `layoutTypeAt`, which takes it FIRST for
599
+ // the same reason -- the one census answer this module takes over a checker
600
+ // answer it is happy with. The `isUnusableEvidence` gate above cannot serve
601
+ // it: the checker's answer for hono's `#matchResult: Result<[unknown,
602
+ // RouterRoute]>` is a perfectly good two-armed union of tuples, and the
603
+ // fact is that its one `unknown` leaf is filled in concretely by the
604
+ // program's only writer. This is the ABI side of that one storage
605
+ // location; the body side already answers the narrowing, so leaving this
606
+ // on the checker is what makes them two authorities -- a field "stored as"
607
+ // the annotation while every read of it "publishes" the narrowing, which
608
+ // is a refusal at the store and again at the return that hands it back.
609
+ const narrowedByStatement = censusNode ? parameters.statedTypeAt(censusNode) : null;
610
+ const declared = narrowedByStatement ?? fromCensus ?? checkerAnswer;
611
+ // A member initialized with a function literal carries the LITERAL's one
612
+ // convention, not its annotation's overload set -- see
613
+ // `physicalInitializerTypeOf`. `null` for every other member, which is
614
+ // then asked exactly as before.
615
+ const physical = declaration === null ? null : physicalInitializerTypeOf(checker, declaration, declared, parameters);
616
+ // `private store = new Map()` types `store` as `Map<unknown, unknown>` --
617
+ // a real, non-`any` type, so `isUnusableEvidence` above never fires and
618
+ // `fromCensus` is never even asked. That is not a gap `parameters` above
619
+ // could close anyway: `collection-bindings.ts`'s answer is a different
620
+ // census, keyed by a different node (the allocation or the owning
621
+ // declaration, not a value-flow write into the field's OWN symbol). Asked
622
+ // here, past `physical`, so a member the checker already resolved through
623
+ // a function literal keeps that answer untouched -- a keyed-collection
624
+ // field is never also that shape. See this field's own `collections`/
625
+ // `table` doc above and `inferredCollectionTypeArgumentsAt`'s header
626
+ // (`structural-array-element.ts`) for why the checker's answer needs a
627
+ // second opinion here at all.
628
+ const inferredCollection = table && declaration ? inferredCollectionTypeArgumentsAt(collections, table, typeOf, bags, declared, declaration) : null;
629
+ const arrayElement = censusNode
630
+ ? inferredArrayElementAt(checker, collections, (node) => checker.getTypeAtLocation(node), censusNode)
631
+ : null;
632
+ const inferredArray = arrayElement ? internArray(typeOf(arrayElement)) : null;
633
+ // The field half of an open bag must ask the same owner-keyed census as
634
+ // every read. This matters most for a JavaScript assignment declaration:
635
+ // `this.children = {}` is checker-typed as `{}`, yet its computed writes
636
+ // state an index of native `Child` instances. A class anchor is already
637
+ // reserved while its body is built, so feeding that concrete index through
638
+ // the bag shape closes a finite Child -> Parent.children -> Child cycle at
639
+ // the nominal identity. Leaving the member at the checker-empty object
640
+ // creates two carriers for one cell and turns that finite recurrence into
641
+ // an unresolved expression/binding cycle downstream.
642
+ const inferredBag = table && declaration ? bagShapeTypeAt(table, typeOf, bags, declaration) : null;
643
+ const optional = (symbol.getFlags() & ts.SymbolFlags.Optional) !== 0;
644
+ const arraySlot = inferredArray && optional ? input.internUnion([inferredArray, typeOf(checker.getUndefinedType())]) : inferredArray;
645
+ // ⛔ An optional member's ABSENCE is a state of its own and has to be in
646
+ // the member's TYPE, because that type is the only thing
647
+ // `representation/` derives the field's carrier from -- `recordFieldsOf`
648
+ // never wraps on the `optional` flag beside it, and nothing downstream
649
+ // does either.
650
+ //
651
+ // Under `exactOptionalPropertyTypes` the checker does NOT put it there:
652
+ // `slot?: Extension | null` reports `Extension | null`, and that alone is
653
+ // a silent miscompile. `representation/optional.ts` collapses `T | null`
654
+ // onto a refcounted reference, so the field became a bare
655
+ // `gea::Ref<Extension>` whose only absent state, `nullptr`, was already
656
+ // spoken for by `null` -- and `{}` read its slot back as `null`.
657
+ // `test/fixtures/optional-slot-holds-null.ts` printed `null,null,value:7`
658
+ // where the language says `absent,null,value:7`: compiled, linked, ran,
659
+ // wrong. Widening restores the third state, and `union.ts` gives it an
660
+ // arm of its own.
661
+ //
662
+ // A no-op wherever the checker already answered with `undefined` in the
663
+ // union -- which is every optional member without
664
+ // `exactOptionalPropertyTypes`, and every one whose payload cannot
665
+ // absorb an absence -- so this adds a state only where one was missing.
666
+ const stated = physical ?? declared;
667
+ return {
668
+ key,
669
+ type: inferredBag ??
670
+ arraySlot ??
671
+ inferredCollection ??
672
+ typeOf(optional ? checker.getNullableType(stated, ts.TypeFlags.Undefined) : stated),
673
+ optional,
674
+ readonly: declaration !== null && ts.canHaveModifiers(declaration)
675
+ ? (ts.getModifiers(declaration) ?? []).some((modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword)
676
+ : false,
677
+ // The literal's own bodies first; then the ones an implementer supplies
678
+ // for a member this DECLARED shape spells as data.
679
+ accessor: literalAccessorOf(symbol, identities) ?? declaredMembers.accessorBodiesOf(symbol)
680
+ };
681
+ };
682
+ const indexesOf = (type) => checker.getIndexInfosOfType(type).flatMap((info) => {
683
+ const key = info.keyType.flags & ts.TypeFlags.String
684
+ ? 'string'
685
+ : info.keyType.flags & ts.TypeFlags.Number
686
+ ? 'number'
687
+ : info.keyType.flags & ts.TypeFlags.ESSymbolLike
688
+ ? 'symbol'
689
+ : null;
690
+ return key ? [{ key, value: typeOf(info.type), readonly: info.isReadonly }] : [];
691
+ });
692
+ const tupleElementsOf = (type) => {
693
+ const target = type.target;
694
+ return checker.getTypeArguments(type).map((argument, index) => {
695
+ const flags = target.elementFlags[index] ?? ts.ElementFlags.Required;
696
+ return {
697
+ type: typeOf(argument),
698
+ optional: (flags & ts.ElementFlags.Optional) !== 0,
699
+ rest: (flags & ts.ElementFlags.Rest) !== 0,
700
+ variadic: (flags & ts.ElementFlags.Variadic) !== 0
701
+ };
702
+ });
703
+ };
704
+ /**
705
+ * Whether a member is per-value storage rather than shared behavior.
706
+ *
707
+ * A method and an accessor are installed once, on a prototype; a property is
708
+ * a slot in the value. A property that *holds* a function (`onClick: () =>
709
+ * void`) is storage, and the symbol flags are what tell the two apart -- not
710
+ * the type of the value the member holds.
711
+ */
712
+ return { signatureOf, memberOf, indexesOf, tupleElementsOf };
713
+ };
714
+ // A callable (a method's own function type) can end up the OUTER frame of a
715
+ // walking collision purely by processing order: the census does not promise
716
+ // an object literal's own allocation runs before one of its methods', and
717
+ // `objectShapeOf`'s member walk can re-enter a method's own signature type
718
+ // via `checker.getTypeOfSymbolAtLocation`, which hands back the identical
719
+ // `ts.Type` the census started from. When that happens, THIS is the type
720
+ // `selfReferentialShapeOf` retries -- and none of its four modelled kinds
721
+ // (union, intersection, tuple, array) match a callable. Giving it the plain
722
+ // `signature` shape the ordinary call-signature branch would have produced
723
+ // is correct: the object it references as `this` is anchored separately, so
724
+ // re-deriving the signature only needs to avoid degrading to `unresolved`
725
+ // for a shape this layer genuinely knows how to build. Lives here, beside
726
+ // `signatureOf` itself, since `structural.ts` is at its file-length cap.
727
+ export const selfReferentialCallableShapeOf = (type, signatureOf) => {
728
+ const callSignatures = type.getCallSignatures();
729
+ const constructSignatures = type.getConstructSignatures();
730
+ if (callSignatures.length === 0 && constructSignatures.length === 0)
731
+ return null;
732
+ return {
733
+ kind: 'signature',
734
+ call: callSignatures.map((one) => signatureOf(one)),
735
+ construct: constructSignatures.map((one) => signatureOf(one))
736
+ };
737
+ };