@tsonic/emitter 0.0.74 → 0.0.75

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 (1497) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/array.test.js +277 -6
  3. package/dist/array.test.js.map +1 -1
  4. package/dist/core/format/attributes.d.ts +3 -3
  5. package/dist/core/format/attributes.js +3 -3
  6. package/dist/core/format/backend-ast/builders.d.ts +1 -0
  7. package/dist/core/format/backend-ast/builders.d.ts.map +1 -1
  8. package/dist/core/format/backend-ast/builders.js +44 -22
  9. package/dist/core/format/backend-ast/builders.js.map +1 -1
  10. package/dist/core/format/backend-ast/invariants.test.js +15 -8
  11. package/dist/core/format/backend-ast/invariants.test.js.map +1 -1
  12. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.d.ts +2 -0
  13. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.d.ts.map +1 -0
  14. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.js +226 -0
  15. package/dist/core/format/backend-ast/printer-cases/basic-and-declarations.test.js.map +1 -0
  16. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.d.ts +2 -0
  17. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.d.ts.map +1 -0
  18. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.js +289 -0
  19. package/dist/core/format/backend-ast/printer-cases/control-flow-and-switch.test.js.map +1 -0
  20. package/dist/core/format/backend-ast/printer-cases/helpers.d.ts +6 -0
  21. package/dist/core/format/backend-ast/printer-cases/helpers.d.ts.map +1 -0
  22. package/dist/core/format/backend-ast/printer-cases/helpers.js +5 -0
  23. package/dist/core/format/backend-ast/printer-cases/helpers.js.map +1 -0
  24. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.d.ts +2 -0
  25. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.d.ts.map +1 -0
  26. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.js +211 -0
  27. package/dist/core/format/backend-ast/printer-cases/identifiers-and-interpolation.test.js.map +1 -0
  28. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.d.ts +2 -0
  29. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.d.ts.map +1 -0
  30. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.js +186 -0
  31. package/dist/core/format/backend-ast/printer-cases/remaining-nodes.test.js.map +1 -0
  32. package/dist/core/format/backend-ast/printer-colon-detection.d.ts +14 -0
  33. package/dist/core/format/backend-ast/printer-colon-detection.d.ts.map +1 -0
  34. package/dist/core/format/backend-ast/printer-colon-detection.js +141 -0
  35. package/dist/core/format/backend-ast/printer-colon-detection.js.map +1 -0
  36. package/dist/core/format/backend-ast/printer-declarations.d.ts +12 -0
  37. package/dist/core/format/backend-ast/printer-declarations.d.ts.map +1 -0
  38. package/dist/core/format/backend-ast/printer-declarations.js +212 -0
  39. package/dist/core/format/backend-ast/printer-declarations.js.map +1 -0
  40. package/dist/core/format/backend-ast/printer-expressions.d.ts +12 -0
  41. package/dist/core/format/backend-ast/printer-expressions.d.ts.map +1 -0
  42. package/dist/core/format/backend-ast/printer-expressions.js +363 -0
  43. package/dist/core/format/backend-ast/printer-expressions.js.map +1 -0
  44. package/dist/core/format/backend-ast/printer-identifiers.d.ts +31 -0
  45. package/dist/core/format/backend-ast/printer-identifiers.d.ts.map +1 -0
  46. package/dist/core/format/backend-ast/printer-identifiers.js +194 -0
  47. package/dist/core/format/backend-ast/printer-identifiers.js.map +1 -0
  48. package/dist/core/format/backend-ast/printer-precedence.d.ts +23 -0
  49. package/dist/core/format/backend-ast/printer-precedence.d.ts.map +1 -0
  50. package/dist/core/format/backend-ast/printer-precedence.js +225 -0
  51. package/dist/core/format/backend-ast/printer-precedence.js.map +1 -0
  52. package/dist/core/format/backend-ast/printer-shared.d.ts +12 -0
  53. package/dist/core/format/backend-ast/printer-shared.d.ts.map +1 -0
  54. package/dist/core/format/backend-ast/printer-shared.js +12 -0
  55. package/dist/core/format/backend-ast/printer-shared.js.map +1 -0
  56. package/dist/core/format/backend-ast/printer-statements.d.ts +24 -0
  57. package/dist/core/format/backend-ast/printer-statements.d.ts.map +1 -0
  58. package/dist/core/format/backend-ast/printer-statements.js +336 -0
  59. package/dist/core/format/backend-ast/printer-statements.js.map +1 -0
  60. package/dist/core/format/backend-ast/printer.d.ts +10 -23
  61. package/dist/core/format/backend-ast/printer.d.ts.map +1 -1
  62. package/dist/core/format/backend-ast/printer.js +11 -1389
  63. package/dist/core/format/backend-ast/printer.js.map +1 -1
  64. package/dist/core/format/backend-ast/printer.test.d.ts +4 -1
  65. package/dist/core/format/backend-ast/printer.test.d.ts.map +1 -1
  66. package/dist/core/format/backend-ast/printer.test.js +4 -795
  67. package/dist/core/format/backend-ast/printer.test.js.map +1 -1
  68. package/dist/core/format/backend-ast/types/compilation-unit-ast.d.ts +26 -0
  69. package/dist/core/format/backend-ast/types/compilation-unit-ast.d.ts.map +1 -0
  70. package/dist/core/format/backend-ast/types/compilation-unit-ast.js +2 -0
  71. package/dist/core/format/backend-ast/types/compilation-unit-ast.js.map +1 -0
  72. package/dist/core/format/backend-ast/types/declaration-ast.d.ts +105 -0
  73. package/dist/core/format/backend-ast/types/declaration-ast.d.ts.map +1 -0
  74. package/dist/core/format/backend-ast/types/declaration-ast.js +2 -0
  75. package/dist/core/format/backend-ast/types/declaration-ast.js.map +1 -0
  76. package/dist/core/format/backend-ast/types/expression-ast.d.ts +219 -0
  77. package/dist/core/format/backend-ast/types/expression-ast.d.ts.map +1 -0
  78. package/dist/core/format/backend-ast/types/expression-ast.js +2 -0
  79. package/dist/core/format/backend-ast/types/expression-ast.js.map +1 -0
  80. package/dist/core/format/backend-ast/types/pattern-ast.d.ts +28 -0
  81. package/dist/core/format/backend-ast/types/pattern-ast.d.ts.map +1 -0
  82. package/dist/core/format/backend-ast/types/pattern-ast.js +2 -0
  83. package/dist/core/format/backend-ast/types/pattern-ast.js.map +1 -0
  84. package/dist/core/format/backend-ast/types/signature-ast.d.ts +34 -0
  85. package/dist/core/format/backend-ast/types/signature-ast.d.ts.map +1 -0
  86. package/dist/core/format/backend-ast/types/signature-ast.js +2 -0
  87. package/dist/core/format/backend-ast/types/signature-ast.js.map +1 -0
  88. package/dist/core/format/backend-ast/types/statement-ast.d.ts +118 -0
  89. package/dist/core/format/backend-ast/types/statement-ast.d.ts.map +1 -0
  90. package/dist/core/format/backend-ast/types/statement-ast.js +2 -0
  91. package/dist/core/format/backend-ast/types/statement-ast.js.map +1 -0
  92. package/dist/core/format/backend-ast/types/type-ast.d.ts +50 -0
  93. package/dist/core/format/backend-ast/types/type-ast.d.ts.map +1 -0
  94. package/dist/core/format/backend-ast/types/type-ast.js +2 -0
  95. package/dist/core/format/backend-ast/types/type-ast.js.map +1 -0
  96. package/dist/core/format/backend-ast/types.d.ts +7 -549
  97. package/dist/core/format/backend-ast/types.d.ts.map +1 -1
  98. package/dist/core/format/backend-ast/types.js +7 -1
  99. package/dist/core/format/backend-ast/types.js.map +1 -1
  100. package/dist/core/format/backend-ast/utils.d.ts +4 -0
  101. package/dist/core/format/backend-ast/utils.d.ts.map +1 -1
  102. package/dist/core/format/backend-ast/utils.js +87 -16
  103. package/dist/core/format/backend-ast/utils.js.map +1 -1
  104. package/dist/core/format/backend-ast/utils.test.js +67 -4
  105. package/dist/core/format/backend-ast/utils.test.js.map +1 -1
  106. package/dist/core/format/local-names.d.ts +26 -0
  107. package/dist/core/format/local-names.d.ts.map +1 -1
  108. package/dist/core/format/local-names.js +59 -0
  109. package/dist/core/format/local-names.js.map +1 -1
  110. package/dist/core/format/local-names.test.d.ts +12 -0
  111. package/dist/core/format/local-names.test.d.ts.map +1 -0
  112. package/dist/core/format/local-names.test.js +278 -0
  113. package/dist/core/format/local-names.test.js.map +1 -0
  114. package/dist/core/format/module-emitter/orchestrator.d.ts.map +1 -1
  115. package/dist/core/format/module-emitter/orchestrator.js +1 -152
  116. package/dist/core/format/module-emitter/orchestrator.js.map +1 -1
  117. package/dist/core/format/module-emitter/static-container.d.ts.map +1 -1
  118. package/dist/core/format/module-emitter/static-container.js +17 -1
  119. package/dist/core/format/module-emitter/static-container.js.map +1 -1
  120. package/dist/core/module-emitter-cases/class-and-recursion.test.d.ts +6 -0
  121. package/dist/core/module-emitter-cases/class-and-recursion.test.d.ts.map +1 -0
  122. package/dist/core/module-emitter-cases/class-and-recursion.test.js +263 -0
  123. package/dist/core/module-emitter-cases/class-and-recursion.test.js.map +1 -0
  124. package/dist/core/module-emitter-cases/static-containers.test.d.ts +6 -0
  125. package/dist/core/module-emitter-cases/static-containers.test.d.ts.map +1 -0
  126. package/dist/core/module-emitter-cases/static-containers.test.js +275 -0
  127. package/dist/core/module-emitter-cases/static-containers.test.js.map +1 -0
  128. package/dist/core/module-emitter.test.d.ts +2 -5
  129. package/dist/core/module-emitter.test.d.ts.map +1 -1
  130. package/dist/core/module-emitter.test.js +2 -403
  131. package/dist/core/module-emitter.test.js.map +1 -1
  132. package/dist/core/semantic/array-expected-types.d.ts +6 -0
  133. package/dist/core/semantic/array-expected-types.d.ts.map +1 -0
  134. package/dist/core/semantic/array-expected-types.js +84 -0
  135. package/dist/core/semantic/array-expected-types.js.map +1 -0
  136. package/dist/core/semantic/array-expected-types.test.d.ts +2 -0
  137. package/dist/core/semantic/array-expected-types.test.d.ts.map +1 -0
  138. package/dist/core/semantic/array-expected-types.test.js +66 -0
  139. package/dist/core/semantic/array-expected-types.test.js.map +1 -0
  140. package/dist/core/semantic/assignment-flow.d.ts +9 -0
  141. package/dist/core/semantic/assignment-flow.d.ts.map +1 -0
  142. package/dist/core/semantic/assignment-flow.js +161 -0
  143. package/dist/core/semantic/assignment-flow.js.map +1 -0
  144. package/dist/core/semantic/async-wrapper-types.d.ts +6 -0
  145. package/dist/core/semantic/async-wrapper-types.d.ts.map +1 -0
  146. package/dist/core/semantic/async-wrapper-types.js +65 -0
  147. package/dist/core/semantic/async-wrapper-types.js.map +1 -0
  148. package/dist/core/semantic/boolean-condition-emission.d.ts +9 -0
  149. package/dist/core/semantic/boolean-condition-emission.d.ts.map +1 -0
  150. package/dist/core/semantic/boolean-condition-emission.js +9 -0
  151. package/dist/core/semantic/boolean-condition-emission.js.map +1 -0
  152. package/dist/core/semantic/boolean-condition-main.d.ts +38 -0
  153. package/dist/core/semantic/boolean-condition-main.d.ts.map +1 -0
  154. package/dist/core/semantic/boolean-condition-main.js +235 -0
  155. package/dist/core/semantic/boolean-condition-main.js.map +1 -0
  156. package/dist/core/semantic/boolean-condition-union.d.ts +20 -0
  157. package/dist/core/semantic/boolean-condition-union.d.ts.map +1 -0
  158. package/dist/core/semantic/boolean-condition-union.js +238 -0
  159. package/dist/core/semantic/boolean-condition-union.js.map +1 -0
  160. package/dist/core/semantic/boolean-context.d.ts +6 -40
  161. package/dist/core/semantic/boolean-context.d.ts.map +1 -1
  162. package/dist/core/semantic/boolean-context.js +6 -709
  163. package/dist/core/semantic/boolean-context.js.map +1 -1
  164. package/dist/core/semantic/boolean-context.test.js +22 -2
  165. package/dist/core/semantic/boolean-context.test.js.map +1 -1
  166. package/dist/core/semantic/broad-array-storage.d.ts +11 -0
  167. package/dist/core/semantic/broad-array-storage.d.ts.map +1 -0
  168. package/dist/core/semantic/broad-array-storage.js +111 -0
  169. package/dist/core/semantic/broad-array-storage.js.map +1 -0
  170. package/dist/core/semantic/broad-object-types.d.ts +7 -0
  171. package/dist/core/semantic/broad-object-types.d.ts.map +1 -0
  172. package/dist/core/semantic/broad-object-types.js +60 -0
  173. package/dist/core/semantic/broad-object-types.js.map +1 -0
  174. package/dist/core/semantic/clr-type-identity.d.ts +21 -0
  175. package/dist/core/semantic/clr-type-identity.d.ts.map +1 -0
  176. package/dist/core/semantic/clr-type-identity.js +230 -0
  177. package/dist/core/semantic/clr-type-identity.js.map +1 -0
  178. package/dist/core/semantic/comparable-types.d.ts +5 -0
  179. package/dist/core/semantic/comparable-types.d.ts.map +1 -0
  180. package/dist/core/semantic/comparable-types.js +108 -0
  181. package/dist/core/semantic/comparable-types.js.map +1 -0
  182. package/dist/core/semantic/comparable-types.test.d.ts +2 -0
  183. package/dist/core/semantic/comparable-types.test.d.ts.map +1 -0
  184. package/dist/core/semantic/comparable-types.test.js +199 -0
  185. package/dist/core/semantic/comparable-types.test.js.map +1 -0
  186. package/dist/core/semantic/condition-branch-narrowing.d.ts +6 -0
  187. package/dist/core/semantic/condition-branch-narrowing.d.ts.map +1 -0
  188. package/dist/core/semantic/condition-branch-narrowing.js +50 -0
  189. package/dist/core/semantic/condition-branch-narrowing.js.map +1 -0
  190. package/dist/core/semantic/defaults.d.ts +7 -0
  191. package/dist/core/semantic/defaults.d.ts.map +1 -0
  192. package/dist/core/semantic/defaults.js +61 -0
  193. package/dist/core/semantic/defaults.js.map +1 -0
  194. package/dist/core/semantic/defaults.test.d.ts +2 -0
  195. package/dist/core/semantic/defaults.test.d.ts.map +1 -0
  196. package/dist/core/semantic/defaults.test.js +88 -0
  197. package/dist/core/semantic/defaults.test.js.map +1 -0
  198. package/dist/core/semantic/deterministic-type-keys.d.ts +8 -0
  199. package/dist/core/semantic/deterministic-type-keys.d.ts.map +1 -0
  200. package/dist/core/semantic/deterministic-type-keys.js +277 -0
  201. package/dist/core/semantic/deterministic-type-keys.js.map +1 -0
  202. package/dist/core/semantic/direct-storage-ir-types.d.ts +12 -0
  203. package/dist/core/semantic/direct-storage-ir-types.d.ts.map +1 -0
  204. package/dist/core/semantic/direct-storage-ir-types.js +189 -0
  205. package/dist/core/semantic/direct-storage-ir-types.js.map +1 -0
  206. package/dist/core/semantic/direct-value-surfaces.d.ts +9 -0
  207. package/dist/core/semantic/direct-value-surfaces.d.ts.map +1 -0
  208. package/dist/core/semantic/direct-value-surfaces.js +181 -0
  209. package/dist/core/semantic/direct-value-surfaces.js.map +1 -0
  210. package/dist/core/semantic/direct-value-surfaces.test.d.ts +2 -0
  211. package/dist/core/semantic/direct-value-surfaces.test.d.ts.map +1 -0
  212. package/dist/core/semantic/direct-value-surfaces.test.js +116 -0
  213. package/dist/core/semantic/direct-value-surfaces.test.js.map +1 -0
  214. package/dist/core/semantic/expected-type-matching.d.ts +7 -0
  215. package/dist/core/semantic/expected-type-matching.d.ts.map +1 -0
  216. package/dist/core/semantic/expected-type-matching.js +101 -0
  217. package/dist/core/semantic/expected-type-matching.js.map +1 -0
  218. package/dist/core/semantic/guard-primitives.d.ts +29 -0
  219. package/dist/core/semantic/guard-primitives.d.ts.map +1 -0
  220. package/dist/core/semantic/guard-primitives.js +80 -0
  221. package/dist/core/semantic/guard-primitives.js.map +1 -0
  222. package/dist/core/semantic/implicit-interfaces.d.ts +34 -0
  223. package/dist/core/semantic/implicit-interfaces.d.ts.map +1 -0
  224. package/dist/core/semantic/implicit-interfaces.js +276 -0
  225. package/dist/core/semantic/implicit-interfaces.js.map +1 -0
  226. package/dist/core/semantic/implicit-interfaces.test.d.ts +2 -0
  227. package/dist/core/semantic/implicit-interfaces.test.d.ts.map +1 -0
  228. package/dist/core/semantic/implicit-interfaces.test.js +280 -0
  229. package/dist/core/semantic/implicit-interfaces.test.js.map +1 -0
  230. package/dist/core/semantic/imports-cases/basic-and-local.test.d.ts +6 -0
  231. package/dist/core/semantic/imports-cases/basic-and-local.test.d.ts.map +1 -0
  232. package/dist/core/semantic/imports-cases/basic-and-local.test.js +504 -0
  233. package/dist/core/semantic/imports-cases/basic-and-local.test.js.map +1 -0
  234. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.d.ts +6 -0
  235. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.d.ts.map +1 -0
  236. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.js +932 -0
  237. package/dist/core/semantic/imports-cases/bindings-and-namespaces.test.js.map +1 -0
  238. package/dist/core/semantic/imports.d.ts.map +1 -1
  239. package/dist/core/semantic/imports.js +158 -22
  240. package/dist/core/semantic/imports.js.map +1 -1
  241. package/dist/core/semantic/imports.test.d.ts +2 -5
  242. package/dist/core/semantic/imports.test.d.ts.map +1 -1
  243. package/dist/core/semantic/imports.test.js +2 -551
  244. package/dist/core/semantic/imports.test.js.map +1 -1
  245. package/dist/core/semantic/instanceof-predicate-refinements.d.ts +10 -0
  246. package/dist/core/semantic/instanceof-predicate-refinements.d.ts.map +1 -0
  247. package/dist/core/semantic/instanceof-predicate-refinements.js +189 -0
  248. package/dist/core/semantic/instanceof-predicate-refinements.js.map +1 -0
  249. package/dist/core/semantic/instanceof-targets.d.ts +10 -0
  250. package/dist/core/semantic/instanceof-targets.d.ts.map +1 -0
  251. package/dist/core/semantic/instanceof-targets.js +20 -0
  252. package/dist/core/semantic/instanceof-targets.js.map +1 -0
  253. package/dist/core/semantic/iteration-types.d.ts +11 -0
  254. package/dist/core/semantic/iteration-types.d.ts.map +1 -0
  255. package/dist/core/semantic/iteration-types.js +116 -0
  256. package/dist/core/semantic/iteration-types.js.map +1 -0
  257. package/dist/core/semantic/js-value-types.d.ts +5 -0
  258. package/dist/core/semantic/js-value-types.d.ts.map +1 -0
  259. package/dist/core/semantic/js-value-types.js +42 -0
  260. package/dist/core/semantic/js-value-types.js.map +1 -0
  261. package/dist/core/semantic/local-type-lookup.d.ts +8 -0
  262. package/dist/core/semantic/local-type-lookup.d.ts.map +1 -0
  263. package/dist/core/semantic/local-type-lookup.js +36 -0
  264. package/dist/core/semantic/local-type-lookup.js.map +1 -0
  265. package/dist/core/semantic/local-types.d.ts +1 -0
  266. package/dist/core/semantic/local-types.d.ts.map +1 -1
  267. package/dist/core/semantic/local-types.js +269 -0
  268. package/dist/core/semantic/local-types.js.map +1 -1
  269. package/dist/core/semantic/materialized-narrowing.d.ts +5 -0
  270. package/dist/core/semantic/materialized-narrowing.d.ts.map +1 -0
  271. package/dist/core/semantic/materialized-narrowing.js +361 -0
  272. package/dist/core/semantic/materialized-narrowing.js.map +1 -0
  273. package/dist/core/semantic/materialized-narrowing.test.d.ts +2 -0
  274. package/dist/core/semantic/materialized-narrowing.test.d.ts.map +1 -0
  275. package/dist/core/semantic/materialized-narrowing.test.js +321 -0
  276. package/dist/core/semantic/materialized-narrowing.test.js.map +1 -0
  277. package/dist/core/semantic/member-surfaces.d.ts +10 -0
  278. package/dist/core/semantic/member-surfaces.d.ts.map +1 -0
  279. package/dist/core/semantic/member-surfaces.js +108 -0
  280. package/dist/core/semantic/member-surfaces.js.map +1 -0
  281. package/dist/core/semantic/member-surfaces.test.d.ts +2 -0
  282. package/dist/core/semantic/member-surfaces.test.d.ts.map +1 -0
  283. package/dist/core/semantic/member-surfaces.test.js +105 -0
  284. package/dist/core/semantic/member-surfaces.test.js.map +1 -0
  285. package/dist/core/semantic/module-map.d.ts.map +1 -1
  286. package/dist/core/semantic/module-map.js +92 -2
  287. package/dist/core/semantic/module-map.js.map +1 -1
  288. package/dist/core/semantic/module-map.test.js +264 -0
  289. package/dist/core/semantic/module-map.test.js.map +1 -1
  290. package/dist/core/semantic/mutable-storage-detection.d.ts +10 -0
  291. package/dist/core/semantic/mutable-storage-detection.d.ts.map +1 -0
  292. package/dist/core/semantic/mutable-storage-detection.js +10 -0
  293. package/dist/core/semantic/mutable-storage-detection.js.map +1 -0
  294. package/dist/core/semantic/mutable-storage-expression-visitor.d.ts +12 -0
  295. package/dist/core/semantic/mutable-storage-expression-visitor.d.ts.map +1 -0
  296. package/dist/core/semantic/mutable-storage-expression-visitor.js +126 -0
  297. package/dist/core/semantic/mutable-storage-expression-visitor.js.map +1 -0
  298. package/dist/core/semantic/mutable-storage-helpers.d.ts +26 -0
  299. package/dist/core/semantic/mutable-storage-helpers.d.ts.map +1 -0
  300. package/dist/core/semantic/mutable-storage-helpers.js +203 -0
  301. package/dist/core/semantic/mutable-storage-helpers.js.map +1 -0
  302. package/dist/core/semantic/mutable-storage-statement-visitor.d.ts +5 -0
  303. package/dist/core/semantic/mutable-storage-statement-visitor.d.ts.map +1 -0
  304. package/dist/core/semantic/mutable-storage-statement-visitor.js +158 -0
  305. package/dist/core/semantic/mutable-storage-statement-visitor.js.map +1 -0
  306. package/dist/core/semantic/mutable-storage-visitors.d.ts +5 -0
  307. package/dist/core/semantic/mutable-storage-visitors.d.ts.map +1 -0
  308. package/dist/core/semantic/mutable-storage-visitors.js +17 -0
  309. package/dist/core/semantic/mutable-storage-visitors.js.map +1 -0
  310. package/dist/core/semantic/mutable-storage.d.ts +2 -9
  311. package/dist/core/semantic/mutable-storage.d.ts.map +1 -1
  312. package/dist/core/semantic/mutable-storage.js +2 -478
  313. package/dist/core/semantic/mutable-storage.js.map +1 -1
  314. package/dist/core/semantic/narrowed-expression-types.d.ts +7 -0
  315. package/dist/core/semantic/narrowed-expression-types.d.ts.map +1 -0
  316. package/dist/core/semantic/narrowed-expression-types.js +287 -0
  317. package/dist/core/semantic/narrowed-expression-types.js.map +1 -0
  318. package/dist/core/semantic/narrowed-expression-types.test.d.ts +2 -0
  319. package/dist/core/semantic/narrowed-expression-types.test.d.ts.map +1 -0
  320. package/dist/core/semantic/narrowed-expression-types.test.js +296 -0
  321. package/dist/core/semantic/narrowed-expression-types.test.js.map +1 -0
  322. package/dist/core/semantic/narrowed-union-resolution.d.ts +42 -0
  323. package/dist/core/semantic/narrowed-union-resolution.d.ts.map +1 -0
  324. package/dist/core/semantic/narrowed-union-resolution.js +162 -0
  325. package/dist/core/semantic/narrowed-union-resolution.js.map +1 -0
  326. package/dist/core/semantic/narrowing-builder-core.d.ts +46 -0
  327. package/dist/core/semantic/narrowing-builder-core.d.ts.map +1 -0
  328. package/dist/core/semantic/narrowing-builder-core.js +332 -0
  329. package/dist/core/semantic/narrowing-builder-core.js.map +1 -0
  330. package/dist/core/semantic/narrowing-builder-core.test.d.ts +2 -0
  331. package/dist/core/semantic/narrowing-builder-core.test.d.ts.map +1 -0
  332. package/dist/core/semantic/narrowing-builder-core.test.js +49 -0
  333. package/dist/core/semantic/narrowing-builder-core.test.js.map +1 -0
  334. package/dist/core/semantic/narrowing-builder-unions.d.ts +18 -0
  335. package/dist/core/semantic/narrowing-builder-unions.d.ts.map +1 -0
  336. package/dist/core/semantic/narrowing-builder-unions.js +336 -0
  337. package/dist/core/semantic/narrowing-builder-unions.js.map +1 -0
  338. package/dist/core/semantic/narrowing-builders.d.ts +10 -0
  339. package/dist/core/semantic/narrowing-builders.d.ts.map +1 -0
  340. package/dist/core/semantic/narrowing-builders.js +10 -0
  341. package/dist/core/semantic/narrowing-builders.js.map +1 -0
  342. package/dist/core/semantic/narrowing-keys.d.ts +6 -0
  343. package/dist/core/semantic/narrowing-keys.d.ts.map +1 -0
  344. package/dist/core/semantic/narrowing-keys.js +27 -0
  345. package/dist/core/semantic/narrowing-keys.js.map +1 -0
  346. package/dist/core/semantic/narrowing-refinements.d.ts +10 -0
  347. package/dist/core/semantic/narrowing-refinements.d.ts.map +1 -0
  348. package/dist/core/semantic/narrowing-refinements.js +10 -0
  349. package/dist/core/semantic/narrowing-refinements.js.map +1 -0
  350. package/dist/core/semantic/nullable-typeof-refinements.d.ts +13 -0
  351. package/dist/core/semantic/nullable-typeof-refinements.d.ts.map +1 -0
  352. package/dist/core/semantic/nullable-typeof-refinements.js +408 -0
  353. package/dist/core/semantic/nullable-typeof-refinements.js.map +1 -0
  354. package/dist/core/semantic/nullish-value-helpers.d.ts +64 -0
  355. package/dist/core/semantic/nullish-value-helpers.d.ts.map +1 -0
  356. package/dist/core/semantic/nullish-value-helpers.js +346 -0
  357. package/dist/core/semantic/nullish-value-helpers.js.map +1 -0
  358. package/dist/core/semantic/parameter-modifier-types.d.ts +3 -0
  359. package/dist/core/semantic/parameter-modifier-types.d.ts.map +1 -0
  360. package/dist/core/semantic/parameter-modifier-types.js +17 -0
  361. package/dist/core/semantic/parameter-modifier-types.js.map +1 -0
  362. package/dist/core/semantic/pattern-types.d.ts +59 -0
  363. package/dist/core/semantic/pattern-types.d.ts.map +1 -0
  364. package/dist/core/semantic/pattern-types.js +92 -0
  365. package/dist/core/semantic/pattern-types.js.map +1 -0
  366. package/dist/core/semantic/property-lookup-membership.d.ts +30 -0
  367. package/dist/core/semantic/property-lookup-membership.d.ts.map +1 -0
  368. package/dist/core/semantic/property-lookup-membership.js +176 -0
  369. package/dist/core/semantic/property-lookup-membership.js.map +1 -0
  370. package/dist/core/semantic/property-lookup-resolution.d.ts +52 -0
  371. package/dist/core/semantic/property-lookup-resolution.d.ts.map +1 -0
  372. package/dist/core/semantic/property-lookup-resolution.js +275 -0
  373. package/dist/core/semantic/property-lookup-resolution.js.map +1 -0
  374. package/dist/core/semantic/property-member-lookup.d.ts +10 -0
  375. package/dist/core/semantic/property-member-lookup.d.ts.map +1 -0
  376. package/dist/core/semantic/property-member-lookup.js +10 -0
  377. package/dist/core/semantic/property-member-lookup.js.map +1 -0
  378. package/dist/core/semantic/reference-type-identity.d.ts +10 -0
  379. package/dist/core/semantic/reference-type-identity.d.ts.map +1 -0
  380. package/dist/core/semantic/reference-type-identity.js +28 -0
  381. package/dist/core/semantic/reference-type-identity.js.map +1 -0
  382. package/dist/core/semantic/runtime-call-arities.d.ts +4 -0
  383. package/dist/core/semantic/runtime-call-arities.d.ts.map +1 -0
  384. package/dist/core/semantic/runtime-call-arities.js +104 -0
  385. package/dist/core/semantic/runtime-call-arities.js.map +1 -0
  386. package/dist/core/semantic/runtime-materialization-targets.d.ts +4 -0
  387. package/dist/core/semantic/runtime-materialization-targets.d.ts.map +1 -0
  388. package/dist/core/semantic/runtime-materialization-targets.js +69 -0
  389. package/dist/core/semantic/runtime-materialization-targets.js.map +1 -0
  390. package/dist/core/semantic/runtime-reification-helpers.d.ts +9 -0
  391. package/dist/core/semantic/runtime-reification-helpers.d.ts.map +1 -0
  392. package/dist/core/semantic/runtime-reification-helpers.js +99 -0
  393. package/dist/core/semantic/runtime-reification-helpers.js.map +1 -0
  394. package/dist/core/semantic/runtime-reification.d.ts +16 -0
  395. package/dist/core/semantic/runtime-reification.d.ts.map +1 -0
  396. package/dist/core/semantic/runtime-reification.js +609 -0
  397. package/dist/core/semantic/runtime-reification.js.map +1 -0
  398. package/dist/core/semantic/runtime-union-alias-identity.d.ts +5 -0
  399. package/dist/core/semantic/runtime-union-alias-identity.d.ts.map +1 -0
  400. package/dist/core/semantic/runtime-union-alias-identity.js +27 -0
  401. package/dist/core/semantic/runtime-union-alias-identity.js.map +1 -0
  402. package/dist/core/semantic/runtime-union-expansion.d.ts +5 -0
  403. package/dist/core/semantic/runtime-union-expansion.d.ts.map +1 -0
  404. package/dist/core/semantic/runtime-union-expansion.js +190 -0
  405. package/dist/core/semantic/runtime-union-expansion.js.map +1 -0
  406. package/dist/core/semantic/runtime-union-family-preservation.d.ts +5 -0
  407. package/dist/core/semantic/runtime-union-family-preservation.d.ts.map +1 -0
  408. package/dist/core/semantic/runtime-union-family-preservation.js +34 -0
  409. package/dist/core/semantic/runtime-union-family-preservation.js.map +1 -0
  410. package/dist/core/semantic/runtime-union-matching.d.ts +9 -0
  411. package/dist/core/semantic/runtime-union-matching.d.ts.map +1 -0
  412. package/dist/core/semantic/runtime-union-matching.js +121 -0
  413. package/dist/core/semantic/runtime-union-matching.js.map +1 -0
  414. package/dist/core/semantic/runtime-union-member-mapping.d.ts +12 -0
  415. package/dist/core/semantic/runtime-union-member-mapping.d.ts.map +1 -0
  416. package/dist/core/semantic/runtime-union-member-mapping.js +25 -0
  417. package/dist/core/semantic/runtime-union-member-mapping.js.map +1 -0
  418. package/dist/core/semantic/runtime-union-member-mapping.test.d.ts +2 -0
  419. package/dist/core/semantic/runtime-union-member-mapping.test.d.ts.map +1 -0
  420. package/dist/core/semantic/runtime-union-member-mapping.test.js +54 -0
  421. package/dist/core/semantic/runtime-union-member-mapping.test.js.map +1 -0
  422. package/dist/core/semantic/runtime-union-ordering.d.ts +4 -0
  423. package/dist/core/semantic/runtime-union-ordering.d.ts.map +1 -0
  424. package/dist/core/semantic/runtime-union-ordering.js +114 -0
  425. package/dist/core/semantic/runtime-union-ordering.js.map +1 -0
  426. package/dist/core/semantic/runtime-union-projection.d.ts +40 -0
  427. package/dist/core/semantic/runtime-union-projection.d.ts.map +1 -0
  428. package/dist/core/semantic/runtime-union-projection.js +150 -0
  429. package/dist/core/semantic/runtime-union-projection.js.map +1 -0
  430. package/dist/core/semantic/runtime-union-projection.test.d.ts +2 -0
  431. package/dist/core/semantic/runtime-union-projection.test.d.ts.map +1 -0
  432. package/dist/core/semantic/runtime-union-projection.test.js +211 -0
  433. package/dist/core/semantic/runtime-union-projection.test.js.map +1 -0
  434. package/dist/core/semantic/runtime-union-registry.d.ts +28 -0
  435. package/dist/core/semantic/runtime-union-registry.d.ts.map +1 -0
  436. package/dist/core/semantic/runtime-union-registry.js +301 -0
  437. package/dist/core/semantic/runtime-union-registry.js.map +1 -0
  438. package/dist/core/semantic/runtime-union-shared.d.ts +23 -0
  439. package/dist/core/semantic/runtime-union-shared.d.ts.map +1 -0
  440. package/dist/core/semantic/runtime-union-shared.js +29 -0
  441. package/dist/core/semantic/runtime-union-shared.js.map +1 -0
  442. package/dist/core/semantic/runtime-unions.d.ts +14 -0
  443. package/dist/core/semantic/runtime-unions.d.ts.map +1 -0
  444. package/dist/core/semantic/runtime-unions.js +330 -0
  445. package/dist/core/semantic/runtime-unions.js.map +1 -0
  446. package/dist/core/semantic/runtime-unions.test.d.ts +2 -0
  447. package/dist/core/semantic/runtime-unions.test.d.ts.map +1 -0
  448. package/dist/core/semantic/runtime-unions.test.js +922 -0
  449. package/dist/core/semantic/runtime-unions.test.js.map +1 -0
  450. package/dist/core/semantic/semantic-union-members.d.ts +46 -0
  451. package/dist/core/semantic/semantic-union-members.d.ts.map +1 -0
  452. package/dist/core/semantic/semantic-union-members.js +144 -0
  453. package/dist/core/semantic/semantic-union-members.js.map +1 -0
  454. package/dist/core/semantic/storage-erased-adaptation.d.ts +14 -0
  455. package/dist/core/semantic/storage-erased-adaptation.d.ts.map +1 -0
  456. package/dist/core/semantic/storage-erased-adaptation.js +191 -0
  457. package/dist/core/semantic/storage-erased-adaptation.js.map +1 -0
  458. package/dist/core/semantic/storage-erased-adaptation.test.d.ts +2 -0
  459. package/dist/core/semantic/storage-erased-adaptation.test.d.ts.map +1 -0
  460. package/dist/core/semantic/storage-erased-adaptation.test.js +271 -0
  461. package/dist/core/semantic/storage-erased-adaptation.test.js.map +1 -0
  462. package/dist/core/semantic/storage-types.d.ts +8 -0
  463. package/dist/core/semantic/storage-types.d.ts.map +1 -0
  464. package/dist/core/semantic/storage-types.js +344 -0
  465. package/dist/core/semantic/storage-types.js.map +1 -0
  466. package/dist/core/semantic/storage-types.test.d.ts +2 -0
  467. package/dist/core/semantic/storage-types.test.d.ts.map +1 -0
  468. package/dist/core/semantic/storage-types.test.js +438 -0
  469. package/dist/core/semantic/storage-types.test.js.map +1 -0
  470. package/dist/core/semantic/structural-resolution.d.ts +11 -0
  471. package/dist/core/semantic/structural-resolution.d.ts.map +1 -0
  472. package/dist/core/semantic/structural-resolution.js +11 -0
  473. package/dist/core/semantic/structural-resolution.js.map +1 -0
  474. package/dist/core/semantic/structural-shape-matching.d.ts +22 -0
  475. package/dist/core/semantic/structural-shape-matching.d.ts.map +1 -0
  476. package/dist/core/semantic/structural-shape-matching.js +255 -0
  477. package/dist/core/semantic/structural-shape-matching.js.map +1 -0
  478. package/dist/core/semantic/structural-view-types.d.ts +10 -0
  479. package/dist/core/semantic/structural-view-types.d.ts.map +1 -0
  480. package/dist/core/semantic/structural-view-types.js +46 -0
  481. package/dist/core/semantic/structural-view-types.js.map +1 -0
  482. package/dist/core/semantic/symbol-types.d.ts +80 -0
  483. package/dist/core/semantic/symbol-types.d.ts.map +1 -0
  484. package/dist/core/semantic/symbol-types.js +102 -0
  485. package/dist/core/semantic/symbol-types.js.map +1 -0
  486. package/dist/core/semantic/ternary-guards.d.ts +43 -0
  487. package/dist/core/semantic/ternary-guards.d.ts.map +1 -0
  488. package/dist/core/semantic/ternary-guards.js +232 -0
  489. package/dist/core/semantic/ternary-guards.js.map +1 -0
  490. package/dist/core/semantic/transparent-expressions.d.ts +6 -0
  491. package/dist/core/semantic/transparent-expressions.d.ts.map +1 -0
  492. package/dist/core/semantic/transparent-expressions.js +18 -0
  493. package/dist/core/semantic/transparent-expressions.js.map +1 -0
  494. package/dist/core/semantic/truthiness-evaluation.d.ts +58 -0
  495. package/dist/core/semantic/truthiness-evaluation.d.ts.map +1 -0
  496. package/dist/core/semantic/truthiness-evaluation.js +295 -0
  497. package/dist/core/semantic/truthiness-evaluation.js.map +1 -0
  498. package/dist/core/semantic/type-alias-index.d.ts.map +1 -1
  499. package/dist/core/semantic/type-alias-index.js +1 -11
  500. package/dist/core/semantic/type-alias-index.js.map +1 -1
  501. package/dist/core/semantic/type-compatibility.d.ts +1 -1
  502. package/dist/core/semantic/type-compatibility.d.ts.map +1 -1
  503. package/dist/core/semantic/type-compatibility.js +75 -15
  504. package/dist/core/semantic/type-compatibility.js.map +1 -1
  505. package/dist/core/semantic/type-equivalence.d.ts +4 -0
  506. package/dist/core/semantic/type-equivalence.d.ts.map +1 -0
  507. package/dist/core/semantic/type-equivalence.js +255 -0
  508. package/dist/core/semantic/type-equivalence.js.map +1 -0
  509. package/dist/core/semantic/type-equivalence.test.d.ts +2 -0
  510. package/dist/core/semantic/type-equivalence.test.d.ts.map +1 -0
  511. package/dist/core/semantic/type-equivalence.test.js +380 -0
  512. package/dist/core/semantic/type-equivalence.test.js.map +1 -0
  513. package/dist/core/semantic/type-param-substitution.d.ts +19 -0
  514. package/dist/core/semantic/type-param-substitution.d.ts.map +1 -0
  515. package/dist/core/semantic/type-param-substitution.js +219 -0
  516. package/dist/core/semantic/type-param-substitution.js.map +1 -0
  517. package/dist/core/semantic/type-resolution-cases/array-like-element.test.d.ts +2 -0
  518. package/dist/core/semantic/type-resolution-cases/array-like-element.test.d.ts.map +1 -0
  519. package/dist/core/semantic/type-resolution-cases/array-like-element.test.js +82 -0
  520. package/dist/core/semantic/type-resolution-cases/array-like-element.test.js.map +1 -0
  521. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.d.ts +2 -0
  522. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.d.ts.map +1 -0
  523. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.js +101 -0
  524. package/dist/core/semantic/type-resolution-cases/contains-type-parameter.test.js.map +1 -0
  525. package/dist/core/semantic/type-resolution-cases/helpers.d.ts +8 -0
  526. package/dist/core/semantic/type-resolution-cases/helpers.d.ts.map +1 -0
  527. package/dist/core/semantic/type-resolution-cases/helpers.js +5 -0
  528. package/dist/core/semantic/type-resolution-cases/helpers.js.map +1 -0
  529. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts +2 -0
  530. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts.map +1 -0
  531. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js +98 -0
  532. package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js.map +1 -0
  533. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.d.ts +2 -0
  534. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.d.ts.map +1 -0
  535. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.js +378 -0
  536. package/dist/core/semantic/type-resolution-cases/nullish-and-value-type.test.js.map +1 -0
  537. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.d.ts +2 -0
  538. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.d.ts.map +1 -0
  539. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.js +137 -0
  540. package/dist/core/semantic/type-resolution-cases/object-literal-member-selection.test.js.map +1 -0
  541. package/dist/core/semantic/type-resolution-cases/property-type.test.d.ts +2 -0
  542. package/dist/core/semantic/type-resolution-cases/property-type.test.d.ts.map +1 -0
  543. package/dist/core/semantic/type-resolution-cases/property-type.test.js +298 -0
  544. package/dist/core/semantic/type-resolution-cases/property-type.test.js.map +1 -0
  545. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.d.ts +2 -0
  546. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.d.ts.map +1 -0
  547. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.js +511 -0
  548. package/dist/core/semantic/type-resolution-cases/structural-resolution.test.js.map +1 -0
  549. package/dist/core/semantic/type-resolution-cases/structural-target.test.d.ts +2 -0
  550. package/dist/core/semantic/type-resolution-cases/structural-target.test.d.ts.map +1 -0
  551. package/dist/core/semantic/type-resolution-cases/structural-target.test.js +80 -0
  552. package/dist/core/semantic/type-resolution-cases/structural-target.test.js.map +1 -0
  553. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.d.ts +2 -0
  554. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.d.ts.map +1 -0
  555. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.js +80 -0
  556. package/dist/core/semantic/type-resolution-cases/substitute-type-args.test.js.map +1 -0
  557. package/dist/core/semantic/type-resolution-cases/union-member-index.test.d.ts +2 -0
  558. package/dist/core/semantic/type-resolution-cases/union-member-index.test.d.ts.map +1 -0
  559. package/dist/core/semantic/type-resolution-cases/union-member-index.test.js +142 -0
  560. package/dist/core/semantic/type-resolution-cases/union-member-index.test.js.map +1 -0
  561. package/dist/core/semantic/type-resolution.d.ts +19 -132
  562. package/dist/core/semantic/type-resolution.d.ts.map +1 -1
  563. package/dist/core/semantic/type-resolution.js +19 -785
  564. package/dist/core/semantic/type-resolution.js.map +1 -1
  565. package/dist/core/semantic/type-resolution.test.d.ts +10 -4
  566. package/dist/core/semantic/type-resolution.test.d.ts.map +1 -1
  567. package/dist/core/semantic/type-resolution.test.js +10 -552
  568. package/dist/core/semantic/type-resolution.test.js.map +1 -1
  569. package/dist/core/semantic/type-substitution.d.ts +10 -0
  570. package/dist/core/semantic/type-substitution.d.ts.map +1 -0
  571. package/dist/core/semantic/type-substitution.js +167 -0
  572. package/dist/core/semantic/type-substitution.js.map +1 -0
  573. package/dist/core/semantic/union-member-matching.d.ts +10 -0
  574. package/dist/core/semantic/union-member-matching.d.ts.map +1 -0
  575. package/dist/core/semantic/union-member-matching.js +10 -0
  576. package/dist/core/semantic/union-member-matching.js.map +1 -0
  577. package/dist/core/semantic/union-predicate-matching.d.ts +40 -0
  578. package/dist/core/semantic/union-predicate-matching.d.ts.map +1 -0
  579. package/dist/core/semantic/union-predicate-matching.js +313 -0
  580. package/dist/core/semantic/union-predicate-matching.js.map +1 -0
  581. package/dist/core/semantic/union-semantics.d.ts +39 -0
  582. package/dist/core/semantic/union-semantics.d.ts.map +1 -0
  583. package/dist/core/semantic/union-semantics.js +48 -0
  584. package/dist/core/semantic/union-semantics.js.map +1 -0
  585. package/dist/core/semantic/union-semantics.test.d.ts +2 -0
  586. package/dist/core/semantic/union-semantics.test.d.ts.map +1 -0
  587. package/dist/core/semantic/union-semantics.test.js +109 -0
  588. package/dist/core/semantic/union-semantics.test.js.map +1 -0
  589. package/dist/core/semantic/union-typeof-matching.d.ts +13 -0
  590. package/dist/core/semantic/union-typeof-matching.d.ts.map +1 -0
  591. package/dist/core/semantic/union-typeof-matching.js +124 -0
  592. package/dist/core/semantic/union-typeof-matching.js.map +1 -0
  593. package/dist/core/semantic/unsafe.d.ts.map +1 -1
  594. package/dist/core/semantic/unsafe.js +23 -15
  595. package/dist/core/semantic/unsafe.js.map +1 -1
  596. package/dist/core/semantic/value-slot-types.d.ts +3 -0
  597. package/dist/core/semantic/value-slot-types.d.ts.map +1 -0
  598. package/dist/core/semantic/value-slot-types.js +8 -0
  599. package/dist/core/semantic/value-slot-types.js.map +1 -0
  600. package/dist/core/semantic/variable-type-resolution.d.ts +68 -0
  601. package/dist/core/semantic/variable-type-resolution.d.ts.map +1 -0
  602. package/dist/core/semantic/variable-type-resolution.js +250 -0
  603. package/dist/core/semantic/variable-type-resolution.js.map +1 -0
  604. package/dist/duplicate-type-suppression.d.ts +18 -0
  605. package/dist/duplicate-type-suppression.d.ts.map +1 -0
  606. package/dist/duplicate-type-suppression.js +249 -0
  607. package/dist/duplicate-type-suppression.js.map +1 -0
  608. package/dist/duplicate-type-suppression.test.d.ts +2 -0
  609. package/dist/duplicate-type-suppression.test.d.ts.map +1 -0
  610. package/dist/duplicate-type-suppression.test.js +44 -0
  611. package/dist/duplicate-type-suppression.test.js.map +1 -0
  612. package/dist/emitter-types/context.d.ts +3 -2
  613. package/dist/emitter-types/context.d.ts.map +1 -1
  614. package/dist/emitter-types/context.js +8 -2
  615. package/dist/emitter-types/context.js.map +1 -1
  616. package/dist/emitter-types/core.d.ts +122 -7
  617. package/dist/emitter-types/core.d.ts.map +1 -1
  618. package/dist/emitter.d.ts +4 -0
  619. package/dist/emitter.d.ts.map +1 -1
  620. package/dist/emitter.js +31 -305
  621. package/dist/emitter.js.map +1 -1
  622. package/dist/expression-emitter.d.ts.map +1 -1
  623. package/dist/expression-emitter.js +55 -1411
  624. package/dist/expression-emitter.js.map +1 -1
  625. package/dist/expressions/access-binding.d.ts +19 -0
  626. package/dist/expressions/access-binding.d.ts.map +1 -0
  627. package/dist/expressions/access-binding.js +286 -0
  628. package/dist/expressions/access-binding.js.map +1 -0
  629. package/dist/expressions/access-computed.d.ts +22 -0
  630. package/dist/expressions/access-computed.d.ts.map +1 -0
  631. package/dist/expressions/access-computed.js +339 -0
  632. package/dist/expressions/access-computed.js.map +1 -0
  633. package/dist/expressions/access-length.d.ts +20 -0
  634. package/dist/expressions/access-length.d.ts.map +1 -0
  635. package/dist/expressions/access-length.js +419 -0
  636. package/dist/expressions/access-length.js.map +1 -0
  637. package/dist/expressions/access-length.test.d.ts +2 -0
  638. package/dist/expressions/access-length.test.d.ts.map +1 -0
  639. package/dist/expressions/access-length.test.js +39 -0
  640. package/dist/expressions/access-length.test.js.map +1 -0
  641. package/dist/expressions/access-property.d.ts +23 -0
  642. package/dist/expressions/access-property.d.ts.map +1 -0
  643. package/dist/expressions/access-property.js +267 -0
  644. package/dist/expressions/access-property.js.map +1 -0
  645. package/dist/expressions/access-resolution-receivers.d.ts +27 -0
  646. package/dist/expressions/access-resolution-receivers.d.ts.map +1 -0
  647. package/dist/expressions/access-resolution-receivers.js +358 -0
  648. package/dist/expressions/access-resolution-receivers.js.map +1 -0
  649. package/dist/expressions/access-resolution-types.d.ts +29 -0
  650. package/dist/expressions/access-resolution-types.d.ts.map +1 -0
  651. package/dist/expressions/access-resolution-types.js +192 -0
  652. package/dist/expressions/access-resolution-types.js.map +1 -0
  653. package/dist/expressions/access-resolution.d.ts +10 -0
  654. package/dist/expressions/access-resolution.d.ts.map +1 -0
  655. package/dist/expressions/access-resolution.js +10 -0
  656. package/dist/expressions/access-resolution.js.map +1 -0
  657. package/dist/expressions/access.d.ts +8 -3
  658. package/dist/expressions/access.d.ts.map +1 -1
  659. package/dist/expressions/access.js +169 -603
  660. package/dist/expressions/access.js.map +1 -1
  661. package/dist/expressions/architecture-invariants.test.d.ts +2 -0
  662. package/dist/expressions/architecture-invariants.test.d.ts.map +1 -0
  663. package/dist/expressions/architecture-invariants.test.js +73 -0
  664. package/dist/expressions/architecture-invariants.test.js.map +1 -0
  665. package/dist/expressions/array-interop.d.ts +3 -0
  666. package/dist/expressions/array-interop.d.ts.map +1 -0
  667. package/dist/expressions/array-interop.js +14 -0
  668. package/dist/expressions/array-interop.js.map +1 -0
  669. package/dist/expressions/array-literal.d.ts +13 -0
  670. package/dist/expressions/array-literal.d.ts.map +1 -0
  671. package/dist/expressions/array-literal.js +373 -0
  672. package/dist/expressions/array-literal.js.map +1 -0
  673. package/dist/expressions/await-normalization.d.ts +6 -0
  674. package/dist/expressions/await-normalization.d.ts.map +1 -0
  675. package/dist/expressions/await-normalization.js +358 -0
  676. package/dist/expressions/await-normalization.js.map +1 -0
  677. package/dist/expressions/calls/call-analysis.d.ts +8 -6
  678. package/dist/expressions/calls/call-analysis.d.ts.map +1 -1
  679. package/dist/expressions/calls/call-analysis.js +120 -31
  680. package/dist/expressions/calls/call-analysis.js.map +1 -1
  681. package/dist/expressions/calls/call-analysis.test.js +2 -2
  682. package/dist/expressions/calls/call-analysis.test.js.map +1 -1
  683. package/dist/expressions/calls/call-arguments-emit.d.ts +16 -0
  684. package/dist/expressions/calls/call-arguments-emit.d.ts.map +1 -0
  685. package/dist/expressions/calls/call-arguments-emit.js +1818 -0
  686. package/dist/expressions/calls/call-arguments-emit.js.map +1 -0
  687. package/dist/expressions/calls/call-arguments-helpers.d.ts +22 -0
  688. package/dist/expressions/calls/call-arguments-helpers.d.ts.map +1 -0
  689. package/dist/expressions/calls/call-arguments-helpers.js +333 -0
  690. package/dist/expressions/calls/call-arguments-helpers.js.map +1 -0
  691. package/dist/expressions/calls/call-arguments.d.ts +10 -0
  692. package/dist/expressions/calls/call-arguments.d.ts.map +1 -0
  693. package/dist/expressions/calls/call-arguments.js +10 -0
  694. package/dist/expressions/calls/call-arguments.js.map +1 -0
  695. package/dist/expressions/calls/call-array-interop.d.ts +10 -0
  696. package/dist/expressions/calls/call-array-interop.d.ts.map +1 -0
  697. package/dist/expressions/calls/call-array-interop.js +10 -0
  698. package/dist/expressions/calls/call-array-interop.js.map +1 -0
  699. package/dist/expressions/calls/call-array-mutation.d.ts +20 -0
  700. package/dist/expressions/calls/call-array-mutation.d.ts.map +1 -0
  701. package/dist/expressions/calls/call-array-mutation.js +260 -0
  702. package/dist/expressions/calls/call-array-mutation.js.map +1 -0
  703. package/dist/expressions/calls/call-array-wrapper.d.ts +14 -0
  704. package/dist/expressions/calls/call-array-wrapper.d.ts.map +1 -0
  705. package/dist/expressions/calls/call-array-wrapper.js +118 -0
  706. package/dist/expressions/calls/call-array-wrapper.js.map +1 -0
  707. package/dist/expressions/calls/call-binding-resolution.d.ts +8 -0
  708. package/dist/expressions/calls/call-binding-resolution.d.ts.map +1 -0
  709. package/dist/expressions/calls/call-binding-resolution.js +12 -0
  710. package/dist/expressions/calls/call-binding-resolution.js.map +1 -0
  711. package/dist/expressions/calls/call-dynamic-import.d.ts +11 -0
  712. package/dist/expressions/calls/call-dynamic-import.d.ts.map +1 -0
  713. package/dist/expressions/calls/call-dynamic-import.js +148 -0
  714. package/dist/expressions/calls/call-dynamic-import.js.map +1 -0
  715. package/dist/expressions/calls/call-emitter.d.ts +9 -3
  716. package/dist/expressions/calls/call-emitter.d.ts.map +1 -1
  717. package/dist/expressions/calls/call-emitter.js +231 -1918
  718. package/dist/expressions/calls/call-emitter.js.map +1 -1
  719. package/dist/expressions/calls/call-emitter.test.d.ts +2 -0
  720. package/dist/expressions/calls/call-emitter.test.d.ts.map +1 -0
  721. package/dist/expressions/calls/call-emitter.test.js +407 -0
  722. package/dist/expressions/calls/call-emitter.test.js.map +1 -0
  723. package/dist/expressions/calls/call-extension-methods.d.ts +17 -0
  724. package/dist/expressions/calls/call-extension-methods.d.ts.map +1 -0
  725. package/dist/expressions/calls/call-extension-methods.js +191 -0
  726. package/dist/expressions/calls/call-extension-methods.js.map +1 -0
  727. package/dist/expressions/calls/call-json.d.ts +15 -0
  728. package/dist/expressions/calls/call-json.d.ts.map +1 -0
  729. package/dist/expressions/calls/call-json.js +212 -0
  730. package/dist/expressions/calls/call-json.js.map +1 -0
  731. package/dist/expressions/calls/call-promise-chains.d.ts +7 -0
  732. package/dist/expressions/calls/call-promise-chains.d.ts.map +1 -0
  733. package/dist/expressions/calls/call-promise-chains.js +411 -0
  734. package/dist/expressions/calls/call-promise-chains.js.map +1 -0
  735. package/dist/expressions/calls/call-promise-ir-types.d.ts +11 -0
  736. package/dist/expressions/calls/call-promise-ir-types.d.ts.map +1 -0
  737. package/dist/expressions/calls/call-promise-ir-types.js +219 -0
  738. package/dist/expressions/calls/call-promise-ir-types.js.map +1 -0
  739. package/dist/expressions/calls/call-promise-normalization.d.ts +11 -0
  740. package/dist/expressions/calls/call-promise-normalization.d.ts.map +1 -0
  741. package/dist/expressions/calls/call-promise-normalization.js +179 -0
  742. package/dist/expressions/calls/call-promise-normalization.js.map +1 -0
  743. package/dist/expressions/calls/call-promise-static.d.ts +7 -0
  744. package/dist/expressions/calls/call-promise-static.d.ts.map +1 -0
  745. package/dist/expressions/calls/call-promise-static.js +188 -0
  746. package/dist/expressions/calls/call-promise-static.js.map +1 -0
  747. package/dist/expressions/calls/call-promise-task-types.d.ts +9 -0
  748. package/dist/expressions/calls/call-promise-task-types.d.ts.map +1 -0
  749. package/dist/expressions/calls/call-promise-task-types.js +88 -0
  750. package/dist/expressions/calls/call-promise-task-types.js.map +1 -0
  751. package/dist/expressions/calls/call-promise.d.ts +11 -0
  752. package/dist/expressions/calls/call-promise.d.ts.map +1 -0
  753. package/dist/expressions/calls/call-promise.js +11 -0
  754. package/dist/expressions/calls/call-promise.js.map +1 -0
  755. package/dist/expressions/calls/call-runtime-union-guards.d.ts +7 -0
  756. package/dist/expressions/calls/call-runtime-union-guards.d.ts.map +1 -0
  757. package/dist/expressions/calls/call-runtime-union-guards.js +131 -0
  758. package/dist/expressions/calls/call-runtime-union-guards.js.map +1 -0
  759. package/dist/expressions/calls/call-symbol.d.ts +7 -0
  760. package/dist/expressions/calls/call-symbol.d.ts.map +1 -0
  761. package/dist/expressions/calls/call-symbol.js +26 -0
  762. package/dist/expressions/calls/call-symbol.js.map +1 -0
  763. package/dist/expressions/calls/new-emitter-collections.d.ts +31 -0
  764. package/dist/expressions/calls/new-emitter-collections.d.ts.map +1 -0
  765. package/dist/expressions/calls/new-emitter-collections.js +310 -0
  766. package/dist/expressions/calls/new-emitter-collections.js.map +1 -0
  767. package/dist/expressions/calls/new-emitter-promise.d.ts +10 -0
  768. package/dist/expressions/calls/new-emitter-promise.d.ts.map +1 -0
  769. package/dist/expressions/calls/new-emitter-promise.js +437 -0
  770. package/dist/expressions/calls/new-emitter-promise.js.map +1 -0
  771. package/dist/expressions/calls/new-emitter.d.ts.map +1 -1
  772. package/dist/expressions/calls/new-emitter.js +28 -557
  773. package/dist/expressions/calls/new-emitter.js.map +1 -1
  774. package/dist/expressions/calls/runtime-expected-type-preference.d.ts +4 -0
  775. package/dist/expressions/calls/runtime-expected-type-preference.d.ts.map +1 -0
  776. package/dist/expressions/calls/runtime-expected-type-preference.js +61 -0
  777. package/dist/expressions/calls/runtime-expected-type-preference.js.map +1 -0
  778. package/dist/expressions/collections.d.ts +4 -21
  779. package/dist/expressions/collections.d.ts.map +1 -1
  780. package/dist/expressions/collections.js +3 -959
  781. package/dist/expressions/collections.js.map +1 -1
  782. package/dist/expressions/dictionary-literal.d.ts +20 -0
  783. package/dist/expressions/dictionary-literal.d.ts.map +1 -0
  784. package/dist/expressions/dictionary-literal.js +214 -0
  785. package/dist/expressions/dictionary-literal.js.map +1 -0
  786. package/dist/expressions/dictionary-safe-access.d.ts +4 -0
  787. package/dist/expressions/dictionary-safe-access.d.ts.map +1 -0
  788. package/dist/expressions/dictionary-safe-access.js +86 -0
  789. package/dist/expressions/dictionary-safe-access.js.map +1 -0
  790. package/dist/expressions/direct-storage-types.d.ts +10 -0
  791. package/dist/expressions/direct-storage-types.d.ts.map +1 -0
  792. package/dist/expressions/direct-storage-types.js +441 -0
  793. package/dist/expressions/direct-storage-types.js.map +1 -0
  794. package/dist/expressions/exact-comparison.d.ts +17 -0
  795. package/dist/expressions/exact-comparison.d.ts.map +1 -0
  796. package/dist/expressions/exact-comparison.js +240 -0
  797. package/dist/expressions/exact-comparison.js.map +1 -0
  798. package/dist/expressions/exact-global-bindings.d.ts +6 -0
  799. package/dist/expressions/exact-global-bindings.d.ts.map +1 -0
  800. package/dist/expressions/exact-global-bindings.js +15 -0
  801. package/dist/expressions/exact-global-bindings.js.map +1 -0
  802. package/dist/expressions/expected-type-adaptation.d.ts +55 -0
  803. package/dist/expressions/expected-type-adaptation.d.ts.map +1 -0
  804. package/dist/expressions/expected-type-adaptation.js +918 -0
  805. package/dist/expressions/expected-type-adaptation.js.map +1 -0
  806. package/dist/expressions/expected-type-adaptation.test.d.ts +2 -0
  807. package/dist/expressions/expected-type-adaptation.test.d.ts.map +1 -0
  808. package/dist/expressions/expected-type-adaptation.test.js +1363 -0
  809. package/dist/expressions/expected-type-adaptation.test.js.map +1 -0
  810. package/dist/expressions/functions.d.ts +6 -15
  811. package/dist/expressions/functions.d.ts.map +1 -1
  812. package/dist/expressions/functions.js +6 -213
  813. package/dist/expressions/functions.js.map +1 -1
  814. package/dist/expressions/identifier-storage.d.ts +43 -0
  815. package/dist/expressions/identifier-storage.d.ts.map +1 -0
  816. package/dist/expressions/identifier-storage.js +478 -0
  817. package/dist/expressions/identifier-storage.js.map +1 -0
  818. package/dist/expressions/identifiers.d.ts.map +1 -1
  819. package/dist/expressions/identifiers.js +126 -11
  820. package/dist/expressions/identifiers.js.map +1 -1
  821. package/dist/expressions/index-cases/alias-carrier-widening.test.d.ts +2 -0
  822. package/dist/expressions/index-cases/alias-carrier-widening.test.d.ts.map +1 -0
  823. package/dist/expressions/index-cases/alias-carrier-widening.test.js +347 -0
  824. package/dist/expressions/index-cases/alias-carrier-widening.test.js.map +1 -0
  825. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.d.ts +2 -0
  826. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.d.ts.map +1 -0
  827. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js +356 -0
  828. package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js.map +1 -0
  829. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.d.ts +2 -0
  830. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.d.ts.map +1 -0
  831. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js +233 -0
  832. package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js.map +1 -0
  833. package/dist/expressions/index-cases/basic-literals-and-calls.test.d.ts +2 -0
  834. package/dist/expressions/index-cases/basic-literals-and-calls.test.d.ts.map +1 -0
  835. package/dist/expressions/index-cases/basic-literals-and-calls.test.js +550 -0
  836. package/dist/expressions/index-cases/basic-literals-and-calls.test.js.map +1 -0
  837. package/dist/expressions/index-cases/defaults-and-char-context.test.d.ts +2 -0
  838. package/dist/expressions/index-cases/defaults-and-char-context.test.d.ts.map +1 -0
  839. package/dist/expressions/index-cases/defaults-and-char-context.test.js +951 -0
  840. package/dist/expressions/index-cases/defaults-and-char-context.test.js.map +1 -0
  841. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.d.ts +2 -0
  842. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.d.ts.map +1 -0
  843. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js +533 -0
  844. package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js.map +1 -0
  845. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.d.ts +2 -0
  846. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.d.ts.map +1 -0
  847. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js +336 -0
  848. package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js.map +1 -0
  849. package/dist/expressions/index-cases/fluent-and-ef-operators.test.d.ts +2 -0
  850. package/dist/expressions/index-cases/fluent-and-ef-operators.test.d.ts.map +1 -0
  851. package/dist/expressions/index-cases/fluent-and-ef-operators.test.js +352 -0
  852. package/dist/expressions/index-cases/fluent-and-ef-operators.test.js.map +1 -0
  853. package/dist/expressions/index-cases/helpers.d.ts +13 -0
  854. package/dist/expressions/index-cases/helpers.d.ts.map +1 -0
  855. package/dist/expressions/index-cases/helpers.js +27 -0
  856. package/dist/expressions/index-cases/helpers.js.map +1 -0
  857. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.d.ts +2 -0
  858. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.d.ts.map +1 -0
  859. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.js +429 -0
  860. package/dist/expressions/index-cases/member-access-and-array-wrappers-a.test.js.map +1 -0
  861. package/dist/expressions/index-cases/nullable-and-comparisons.test.d.ts +2 -0
  862. package/dist/expressions/index-cases/nullable-and-comparisons.test.d.ts.map +1 -0
  863. package/dist/expressions/index-cases/nullable-and-comparisons.test.js +423 -0
  864. package/dist/expressions/index-cases/nullable-and-comparisons.test.js.map +1 -0
  865. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.d.ts +2 -0
  866. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.d.ts.map +1 -0
  867. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js +482 -0
  868. package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js.map +1 -0
  869. package/dist/expressions/index-cases/runtime-union-reification-a.test.d.ts +2 -0
  870. package/dist/expressions/index-cases/runtime-union-reification-a.test.d.ts.map +1 -0
  871. package/dist/expressions/index-cases/runtime-union-reification-a.test.js +454 -0
  872. package/dist/expressions/index-cases/runtime-union-reification-a.test.js.map +1 -0
  873. package/dist/expressions/index-cases/runtime-union-reification-b.test.d.ts +2 -0
  874. package/dist/expressions/index-cases/runtime-union-reification-b.test.d.ts.map +1 -0
  875. package/dist/expressions/index-cases/runtime-union-reification-b.test.js +852 -0
  876. package/dist/expressions/index-cases/runtime-union-reification-b.test.js.map +1 -0
  877. package/dist/expressions/index-cases/spreads-and-member-bindings.test.d.ts +2 -0
  878. package/dist/expressions/index-cases/spreads-and-member-bindings.test.d.ts.map +1 -0
  879. package/dist/expressions/index-cases/spreads-and-member-bindings.test.js +616 -0
  880. package/dist/expressions/index-cases/spreads-and-member-bindings.test.js.map +1 -0
  881. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.d.ts +2 -0
  882. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.d.ts.map +1 -0
  883. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js +304 -0
  884. package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js.map +1 -0
  885. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.d.ts +2 -0
  886. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.d.ts.map +1 -0
  887. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js +369 -0
  888. package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js.map +1 -0
  889. package/dist/expressions/index-cases/tuple-rest-and-unions.test.d.ts +2 -0
  890. package/dist/expressions/index-cases/tuple-rest-and-unions.test.d.ts.map +1 -0
  891. package/dist/expressions/index-cases/tuple-rest-and-unions.test.js +392 -0
  892. package/dist/expressions/index-cases/tuple-rest-and-unions.test.js.map +1 -0
  893. package/dist/expressions/index.test.d.ts +17 -5
  894. package/dist/expressions/index.test.d.ts.map +1 -1
  895. package/dist/expressions/index.test.js +17 -2835
  896. package/dist/expressions/index.test.js.map +1 -1
  897. package/dist/expressions/invoked-lambda.d.ts +12 -0
  898. package/dist/expressions/invoked-lambda.d.ts.map +1 -0
  899. package/dist/expressions/invoked-lambda.js +69 -0
  900. package/dist/expressions/invoked-lambda.js.map +1 -0
  901. package/dist/expressions/lambda-body.d.ts +23 -0
  902. package/dist/expressions/lambda-body.d.ts.map +1 -0
  903. package/dist/expressions/lambda-body.js +421 -0
  904. package/dist/expressions/lambda-body.js.map +1 -0
  905. package/dist/expressions/lambda-parameters.d.ts +32 -0
  906. package/dist/expressions/lambda-parameters.d.ts.map +1 -0
  907. package/dist/expressions/lambda-parameters.js +279 -0
  908. package/dist/expressions/lambda-parameters.js.map +1 -0
  909. package/dist/expressions/literals.d.ts.map +1 -1
  910. package/dist/expressions/literals.js +18 -3
  911. package/dist/expressions/literals.js.map +1 -1
  912. package/dist/expressions/literals.test.js +48 -0
  913. package/dist/expressions/literals.test.js.map +1 -1
  914. package/dist/expressions/object-helpers.d.ts +22 -0
  915. package/dist/expressions/object-helpers.d.ts.map +1 -0
  916. package/dist/expressions/object-helpers.js +98 -0
  917. package/dist/expressions/object-helpers.js.map +1 -0
  918. package/dist/expressions/object-literal-spreads.d.ts +20 -0
  919. package/dist/expressions/object-literal-spreads.d.ts.map +1 -0
  920. package/dist/expressions/object-literal-spreads.js +188 -0
  921. package/dist/expressions/object-literal-spreads.js.map +1 -0
  922. package/dist/expressions/object-literal.d.ts +18 -0
  923. package/dist/expressions/object-literal.d.ts.map +1 -0
  924. package/dist/expressions/object-literal.js +178 -0
  925. package/dist/expressions/object-literal.js.map +1 -0
  926. package/dist/expressions/operators/assignment-emitter.d.ts.map +1 -1
  927. package/dist/expressions/operators/assignment-emitter.js +78 -27
  928. package/dist/expressions/operators/assignment-emitter.js.map +1 -1
  929. package/dist/expressions/operators/binary-dispatch.d.ts +37 -0
  930. package/dist/expressions/operators/binary-dispatch.d.ts.map +1 -0
  931. package/dist/expressions/operators/binary-dispatch.js +449 -0
  932. package/dist/expressions/operators/binary-dispatch.js.map +1 -0
  933. package/dist/expressions/operators/binary-emitter.d.ts +6 -29
  934. package/dist/expressions/operators/binary-emitter.d.ts.map +1 -1
  935. package/dist/expressions/operators/binary-emitter.js +6 -419
  936. package/dist/expressions/operators/binary-emitter.js.map +1 -1
  937. package/dist/expressions/operators/binary-helpers.d.ts +17 -0
  938. package/dist/expressions/operators/binary-helpers.d.ts.map +1 -0
  939. package/dist/expressions/operators/binary-helpers.js +119 -0
  940. package/dist/expressions/operators/binary-helpers.js.map +1 -0
  941. package/dist/expressions/operators/binary-runtime-union-comparison.d.ts +7 -0
  942. package/dist/expressions/operators/binary-runtime-union-comparison.d.ts.map +1 -0
  943. package/dist/expressions/operators/binary-runtime-union-comparison.js +150 -0
  944. package/dist/expressions/operators/binary-runtime-union-comparison.js.map +1 -0
  945. package/dist/expressions/operators/binary-special-ops.d.ts +29 -0
  946. package/dist/expressions/operators/binary-special-ops.d.ts.map +1 -0
  947. package/dist/expressions/operators/binary-special-ops.js +468 -0
  948. package/dist/expressions/operators/binary-special-ops.js.map +1 -0
  949. package/dist/expressions/operators/conditional-emitter.d.ts.map +1 -1
  950. package/dist/expressions/operators/conditional-emitter.js +221 -216
  951. package/dist/expressions/operators/conditional-emitter.js.map +1 -1
  952. package/dist/expressions/operators/helpers.d.ts +10 -0
  953. package/dist/expressions/operators/helpers.d.ts.map +1 -1
  954. package/dist/expressions/operators/helpers.js +30 -0
  955. package/dist/expressions/operators/helpers.js.map +1 -1
  956. package/dist/expressions/operators/logical-emitter.d.ts +2 -2
  957. package/dist/expressions/operators/logical-emitter.d.ts.map +1 -1
  958. package/dist/expressions/operators/logical-emitter.js +293 -10
  959. package/dist/expressions/operators/logical-emitter.js.map +1 -1
  960. package/dist/expressions/operators/unary-emitter.d.ts.map +1 -1
  961. package/dist/expressions/operators/unary-emitter.js +6 -21
  962. package/dist/expressions/operators/unary-emitter.js.map +1 -1
  963. package/dist/expressions/operators/write-targets.d.ts +5 -0
  964. package/dist/expressions/operators/write-targets.d.ts.map +1 -0
  965. package/dist/expressions/operators/write-targets.js +65 -0
  966. package/dist/expressions/operators/write-targets.js.map +1 -0
  967. package/dist/expressions/other.d.ts.map +1 -1
  968. package/dist/expressions/other.js +17 -50
  969. package/dist/expressions/other.js.map +1 -1
  970. package/dist/expressions/post-emission-adaptation.d.ts +19 -0
  971. package/dist/expressions/post-emission-adaptation.d.ts.map +1 -0
  972. package/dist/expressions/post-emission-adaptation.js +939 -0
  973. package/dist/expressions/post-emission-adaptation.js.map +1 -0
  974. package/dist/expressions/runtime-union-adaptation-projection.d.ts +12 -0
  975. package/dist/expressions/runtime-union-adaptation-projection.d.ts.map +1 -0
  976. package/dist/expressions/runtime-union-adaptation-projection.js +182 -0
  977. package/dist/expressions/runtime-union-adaptation-projection.js.map +1 -0
  978. package/dist/expressions/runtime-union-adaptation-upcast.d.ts +11 -0
  979. package/dist/expressions/runtime-union-adaptation-upcast.d.ts.map +1 -0
  980. package/dist/expressions/runtime-union-adaptation-upcast.js +722 -0
  981. package/dist/expressions/runtime-union-adaptation-upcast.js.map +1 -0
  982. package/dist/expressions/runtime-union-adaptation.d.ts +10 -0
  983. package/dist/expressions/runtime-union-adaptation.d.ts.map +1 -0
  984. package/dist/expressions/runtime-union-adaptation.js +10 -0
  985. package/dist/expressions/runtime-union-adaptation.js.map +1 -0
  986. package/dist/expressions/structural-adaptation-types.d.ts +12 -0
  987. package/dist/expressions/structural-adaptation-types.d.ts.map +1 -0
  988. package/dist/expressions/structural-adaptation-types.js +3 -0
  989. package/dist/expressions/structural-adaptation-types.js.map +1 -0
  990. package/dist/expressions/structural-adaptation.d.ts +16 -0
  991. package/dist/expressions/structural-adaptation.d.ts.map +1 -0
  992. package/dist/expressions/structural-adaptation.js +14 -0
  993. package/dist/expressions/structural-adaptation.js.map +1 -0
  994. package/dist/expressions/structural-anonymous-targets.d.ts +4 -0
  995. package/dist/expressions/structural-anonymous-targets.d.ts.map +1 -0
  996. package/dist/expressions/structural-anonymous-targets.js +156 -0
  997. package/dist/expressions/structural-anonymous-targets.js.map +1 -0
  998. package/dist/expressions/structural-collection-adaptation.d.ts +7 -0
  999. package/dist/expressions/structural-collection-adaptation.d.ts.map +1 -0
  1000. package/dist/expressions/structural-collection-adaptation.js +682 -0
  1001. package/dist/expressions/structural-collection-adaptation.js.map +1 -0
  1002. package/dist/expressions/structural-object-adaptation.d.ts +6 -0
  1003. package/dist/expressions/structural-object-adaptation.d.ts.map +1 -0
  1004. package/dist/expressions/structural-object-adaptation.js +213 -0
  1005. package/dist/expressions/structural-object-adaptation.js.map +1 -0
  1006. package/dist/expressions/structural-property-model.d.ts +6 -0
  1007. package/dist/expressions/structural-property-model.d.ts.map +1 -0
  1008. package/dist/expressions/structural-property-model.js +304 -0
  1009. package/dist/expressions/structural-property-model.js.map +1 -0
  1010. package/dist/expressions/structural-type-shapes.d.ts +19 -0
  1011. package/dist/expressions/structural-type-shapes.d.ts.map +1 -0
  1012. package/dist/expressions/structural-type-shapes.js +318 -0
  1013. package/dist/expressions/structural-type-shapes.js.map +1 -0
  1014. package/dist/expressions/structural-type-shapes.test.d.ts +2 -0
  1015. package/dist/expressions/structural-type-shapes.test.d.ts.map +1 -0
  1016. package/dist/expressions/structural-type-shapes.test.js +60 -0
  1017. package/dist/expressions/structural-type-shapes.test.js.map +1 -0
  1018. package/dist/expressions/type-assertion-emitters.d.ts +50 -0
  1019. package/dist/expressions/type-assertion-emitters.d.ts.map +1 -0
  1020. package/dist/expressions/type-assertion-emitters.js +675 -0
  1021. package/dist/expressions/type-assertion-emitters.js.map +1 -0
  1022. package/dist/fixture-regression-mirrors.test.d.ts +2 -0
  1023. package/dist/fixture-regression-mirrors.test.d.ts.map +1 -0
  1024. package/dist/fixture-regression-mirrors.test.js +580 -0
  1025. package/dist/fixture-regression-mirrors.test.js.map +1 -0
  1026. package/dist/generated-files.d.ts +19 -0
  1027. package/dist/generated-files.d.ts.map +1 -0
  1028. package/dist/generated-files.js +519 -0
  1029. package/dist/generated-files.js.map +1 -0
  1030. package/dist/generated-files.test.d.ts +2 -0
  1031. package/dist/generated-files.test.d.ts.map +1 -0
  1032. package/dist/generated-files.test.js +103 -0
  1033. package/dist/generated-files.test.js.map +1 -0
  1034. package/dist/generator-cases/bidirectional-core.test.d.ts +6 -0
  1035. package/dist/generator-cases/bidirectional-core.test.d.ts.map +1 -0
  1036. package/dist/generator-cases/bidirectional-core.test.js +272 -0
  1037. package/dist/generator-cases/bidirectional-core.test.js.map +1 -0
  1038. package/dist/generator-cases/bidirectional-features.test.d.ts +6 -0
  1039. package/dist/generator-cases/bidirectional-features.test.d.ts.map +1 -0
  1040. package/dist/generator-cases/bidirectional-features.test.js +360 -0
  1041. package/dist/generator-cases/bidirectional-features.test.js.map +1 -0
  1042. package/dist/generator-cases/simple-generators.test.d.ts +6 -0
  1043. package/dist/generator-cases/simple-generators.test.d.ts.map +1 -0
  1044. package/dist/generator-cases/simple-generators.test.js +227 -0
  1045. package/dist/generator-cases/simple-generators.test.js.map +1 -0
  1046. package/dist/generator-exchange.d.ts +3 -2
  1047. package/dist/generator-exchange.d.ts.map +1 -1
  1048. package/dist/generator-exchange.js +46 -15
  1049. package/dist/generator-exchange.js.map +1 -1
  1050. package/dist/generator-wrapper-builders.d.ts +10 -0
  1051. package/dist/generator-wrapper-builders.d.ts.map +1 -0
  1052. package/dist/generator-wrapper-builders.js +288 -0
  1053. package/dist/generator-wrapper-builders.js.map +1 -0
  1054. package/dist/generator-wrapper.d.ts +16 -5
  1055. package/dist/generator-wrapper.d.ts.map +1 -1
  1056. package/dist/generator-wrapper.js +47 -288
  1057. package/dist/generator-wrapper.js.map +1 -1
  1058. package/dist/generator.test.d.ts +3 -5
  1059. package/dist/generator.test.d.ts.map +1 -1
  1060. package/dist/generator.test.js +3 -766
  1061. package/dist/generator.test.js.map +1 -1
  1062. package/dist/golden-tests/config-parser.d.ts.map +1 -1
  1063. package/dist/golden-tests/config-parser.js +7 -0
  1064. package/dist/golden-tests/config-parser.js.map +1 -1
  1065. package/dist/golden-tests/discovery.js +1 -0
  1066. package/dist/golden-tests/discovery.js.map +1 -1
  1067. package/dist/golden-tests/runner.d.ts.map +1 -1
  1068. package/dist/golden-tests/runner.js +12 -40
  1069. package/dist/golden-tests/runner.js.map +1 -1
  1070. package/dist/golden-tests/types.d.ts +2 -0
  1071. package/dist/golden-tests/types.d.ts.map +1 -1
  1072. package/dist/hierarchical-bindings.test.js +6 -9
  1073. package/dist/hierarchical-bindings.test.js.map +1 -1
  1074. package/dist/integration-cases/arrow-and-generics-a.test.d.ts +2 -0
  1075. package/dist/integration-cases/arrow-and-generics-a.test.d.ts.map +1 -0
  1076. package/dist/integration-cases/arrow-and-generics-a.test.js +695 -0
  1077. package/dist/integration-cases/arrow-and-generics-a.test.js.map +1 -0
  1078. package/dist/integration-cases/arrow-and-generics-b.test.d.ts +2 -0
  1079. package/dist/integration-cases/arrow-and-generics-b.test.d.ts.map +1 -0
  1080. package/dist/integration-cases/arrow-and-generics-b.test.js +218 -0
  1081. package/dist/integration-cases/arrow-and-generics-b.test.js.map +1 -0
  1082. package/dist/integration-cases/await-and-intrinsics.test.d.ts +2 -0
  1083. package/dist/integration-cases/await-and-intrinsics.test.d.ts.map +1 -0
  1084. package/dist/integration-cases/await-and-intrinsics.test.js +237 -0
  1085. package/dist/integration-cases/await-and-intrinsics.test.js.map +1 -0
  1086. package/dist/integration-cases/clr-iterable-overloads.test.d.ts +2 -0
  1087. package/dist/integration-cases/clr-iterable-overloads.test.d.ts.map +1 -0
  1088. package/dist/integration-cases/clr-iterable-overloads.test.js +446 -0
  1089. package/dist/integration-cases/clr-iterable-overloads.test.js.map +1 -0
  1090. package/dist/integration-cases/full-module-and-promises.test.d.ts +2 -0
  1091. package/dist/integration-cases/full-module-and-promises.test.d.ts.map +1 -0
  1092. package/dist/integration-cases/full-module-and-promises.test.js +472 -0
  1093. package/dist/integration-cases/full-module-and-promises.test.js.map +1 -0
  1094. package/dist/integration-cases/helpers.d.ts +7 -0
  1095. package/dist/integration-cases/helpers.d.ts.map +1 -0
  1096. package/dist/integration-cases/helpers.js +348 -0
  1097. package/dist/integration-cases/helpers.js.map +1 -0
  1098. package/dist/integration-cases/object-literals-and-channels.test.d.ts +2 -0
  1099. package/dist/integration-cases/object-literals-and-channels.test.d.ts.map +1 -0
  1100. package/dist/integration-cases/object-literals-and-channels.test.js +72 -0
  1101. package/dist/integration-cases/object-literals-and-channels.test.js.map +1 -0
  1102. package/dist/integration-cases/regression-coverage-a.test.d.ts +2 -0
  1103. package/dist/integration-cases/regression-coverage-a.test.d.ts.map +1 -0
  1104. package/dist/integration-cases/regression-coverage-a.test.js +533 -0
  1105. package/dist/integration-cases/regression-coverage-a.test.js.map +1 -0
  1106. package/dist/integration-cases/regression-coverage-b.test.d.ts +2 -0
  1107. package/dist/integration-cases/regression-coverage-b.test.d.ts.map +1 -0
  1108. package/dist/integration-cases/regression-coverage-b.test.js +806 -0
  1109. package/dist/integration-cases/regression-coverage-b.test.js.map +1 -0
  1110. package/dist/integration-cases/regression-coverage-c.test.d.ts +2 -0
  1111. package/dist/integration-cases/regression-coverage-c.test.d.ts.map +1 -0
  1112. package/dist/integration-cases/regression-coverage-c.test.js +4139 -0
  1113. package/dist/integration-cases/regression-coverage-c.test.js.map +1 -0
  1114. package/dist/integration.test.d.ts +9 -5
  1115. package/dist/integration.test.d.ts.map +1 -1
  1116. package/dist/integration.test.js +9 -1223
  1117. package/dist/integration.test.js.map +1 -1
  1118. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.d.ts +5 -0
  1119. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.d.ts.map +1 -0
  1120. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.js +93 -0
  1121. package/dist/invariants/numeric-proof-contract-cases/emitter-and-annotations.test.js.map +1 -0
  1122. package/dist/invariants/numeric-proof-contract-cases/helpers.d.ts +14 -0
  1123. package/dist/invariants/numeric-proof-contract-cases/helpers.d.ts.map +1 -0
  1124. package/dist/invariants/numeric-proof-contract-cases/helpers.js +158 -0
  1125. package/dist/invariants/numeric-proof-contract-cases/helpers.js.map +1 -0
  1126. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.d.ts +5 -0
  1127. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.d.ts.map +1 -0
  1128. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.js +242 -0
  1129. package/dist/invariants/numeric-proof-contract-cases/proof-and-diagnostics.test.js.map +1 -0
  1130. package/dist/invariants/numeric-proof-contract.test.d.ts +2 -18
  1131. package/dist/invariants/numeric-proof-contract.test.d.ts.map +1 -1
  1132. package/dist/invariants/numeric-proof-contract.test.js +2 -510
  1133. package/dist/invariants/numeric-proof-contract.test.js.map +1 -1
  1134. package/dist/json-aot-generic.test.js +320 -5
  1135. package/dist/json-aot-generic.test.js.map +1 -1
  1136. package/dist/naming-policy.d.ts.map +1 -1
  1137. package/dist/naming-policy.js +19 -0
  1138. package/dist/naming-policy.js.map +1 -1
  1139. package/dist/patterns/local-lowering.d.ts +27 -0
  1140. package/dist/patterns/local-lowering.d.ts.map +1 -0
  1141. package/dist/patterns/local-lowering.js +296 -0
  1142. package/dist/patterns/local-lowering.js.map +1 -0
  1143. package/dist/patterns/static-assignment-lowering.d.ts +11 -0
  1144. package/dist/patterns/static-assignment-lowering.d.ts.map +1 -0
  1145. package/dist/patterns/static-assignment-lowering.js +11 -0
  1146. package/dist/patterns/static-assignment-lowering.js.map +1 -0
  1147. package/dist/patterns/static-lowering-assignments.d.ts +16 -0
  1148. package/dist/patterns/static-lowering-assignments.d.ts.map +1 -0
  1149. package/dist/patterns/static-lowering-assignments.js +269 -0
  1150. package/dist/patterns/static-lowering-assignments.js.map +1 -0
  1151. package/dist/patterns/static-lowering-members.d.ts +15 -0
  1152. package/dist/patterns/static-lowering-members.d.ts.map +1 -0
  1153. package/dist/patterns/static-lowering-members.js +231 -0
  1154. package/dist/patterns/static-lowering-members.js.map +1 -0
  1155. package/dist/patterns-cases/array-and-object.test.d.ts +2 -0
  1156. package/dist/patterns-cases/array-and-object.test.d.ts.map +1 -0
  1157. package/dist/patterns-cases/array-and-object.test.js +370 -0
  1158. package/dist/patterns-cases/array-and-object.test.js.map +1 -0
  1159. package/dist/patterns-cases/assignments-and-complex.test.d.ts +2 -0
  1160. package/dist/patterns-cases/assignments-and-complex.test.d.ts.map +1 -0
  1161. package/dist/patterns-cases/assignments-and-complex.test.js +361 -0
  1162. package/dist/patterns-cases/assignments-and-complex.test.js.map +1 -0
  1163. package/dist/patterns-cases/edge-cases.test.d.ts +2 -0
  1164. package/dist/patterns-cases/edge-cases.test.d.ts.map +1 -0
  1165. package/dist/patterns-cases/edge-cases.test.js +133 -0
  1166. package/dist/patterns-cases/edge-cases.test.js.map +1 -0
  1167. package/dist/patterns-cases/helpers.d.ts +6 -0
  1168. package/dist/patterns-cases/helpers.d.ts.map +1 -0
  1169. package/dist/patterns-cases/helpers.js +33 -0
  1170. package/dist/patterns-cases/helpers.js.map +1 -0
  1171. package/dist/patterns-cases/loops-and-parameters.test.d.ts +2 -0
  1172. package/dist/patterns-cases/loops-and-parameters.test.d.ts.map +1 -0
  1173. package/dist/patterns-cases/loops-and-parameters.test.js +275 -0
  1174. package/dist/patterns-cases/loops-and-parameters.test.js.map +1 -0
  1175. package/dist/patterns-cases/methods-and-semantic-infra.test.d.ts +2 -0
  1176. package/dist/patterns-cases/methods-and-semantic-infra.test.d.ts.map +1 -0
  1177. package/dist/patterns-cases/methods-and-semantic-infra.test.js +438 -0
  1178. package/dist/patterns-cases/methods-and-semantic-infra.test.js.map +1 -0
  1179. package/dist/patterns.d.ts +5 -20
  1180. package/dist/patterns.d.ts.map +1 -1
  1181. package/dist/patterns.js +3 -809
  1182. package/dist/patterns.js.map +1 -1
  1183. package/dist/patterns.test.d.ts +5 -14
  1184. package/dist/patterns.test.d.ts.map +1 -1
  1185. package/dist/patterns.test.js +5 -1341
  1186. package/dist/patterns.test.js.map +1 -1
  1187. package/dist/runtime-union-cases/helpers.d.ts +7 -0
  1188. package/dist/runtime-union-cases/helpers.d.ts.map +1 -0
  1189. package/dist/runtime-union-cases/helpers.js +17 -0
  1190. package/dist/runtime-union-cases/helpers.js.map +1 -0
  1191. package/dist/specialization/generic-functions-cases/basics-and-structural.test.d.ts +6 -0
  1192. package/dist/specialization/generic-functions-cases/basics-and-structural.test.d.ts.map +1 -0
  1193. package/dist/specialization/generic-functions-cases/basics-and-structural.test.js +357 -0
  1194. package/dist/specialization/generic-functions-cases/basics-and-structural.test.js.map +1 -0
  1195. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.d.ts +6 -0
  1196. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.d.ts.map +1 -0
  1197. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.js +304 -0
  1198. package/dist/specialization/generic-functions-cases/class-and-interface-constraints.test.js.map +1 -0
  1199. package/dist/specialization/generic-functions.test.d.ts +2 -5
  1200. package/dist/specialization/generic-functions.test.d.ts.map +1 -1
  1201. package/dist/specialization/generic-functions.test.js +2 -650
  1202. package/dist/specialization/generic-functions.test.js.map +1 -1
  1203. package/dist/specialization/helpers.d.ts.map +1 -1
  1204. package/dist/specialization/helpers.js +2 -16
  1205. package/dist/specialization/helpers.js.map +1 -1
  1206. package/dist/specialization/interfaces.test.js +58 -0
  1207. package/dist/specialization/interfaces.test.js.map +1 -1
  1208. package/dist/specialization/naming.d.ts.map +1 -1
  1209. package/dist/specialization/naming.js +9 -2
  1210. package/dist/specialization/naming.js.map +1 -1
  1211. package/dist/statements/block-emitters/block-and-return.d.ts +10 -0
  1212. package/dist/statements/block-emitters/block-and-return.d.ts.map +1 -0
  1213. package/dist/statements/block-emitters/block-and-return.js +132 -0
  1214. package/dist/statements/block-emitters/block-and-return.js.map +1 -0
  1215. package/dist/statements/block-emitters/expression-statements.d.ts +7 -0
  1216. package/dist/statements/block-emitters/expression-statements.d.ts.map +1 -0
  1217. package/dist/statements/block-emitters/expression-statements.js +72 -0
  1218. package/dist/statements/block-emitters/expression-statements.js.map +1 -0
  1219. package/dist/statements/block-emitters/yield-statements.d.ts +13 -0
  1220. package/dist/statements/block-emitters/yield-statements.d.ts.map +1 -0
  1221. package/dist/statements/block-emitters/yield-statements.js +217 -0
  1222. package/dist/statements/block-emitters/yield-statements.js.map +1 -0
  1223. package/dist/statements/blocks.d.ts +3 -86
  1224. package/dist/statements/blocks.d.ts.map +1 -1
  1225. package/dist/statements/blocks.js +3 -443
  1226. package/dist/statements/blocks.js.map +1 -1
  1227. package/dist/statements/classes/members/constructors.d.ts.map +1 -1
  1228. package/dist/statements/classes/members/constructors.js +105 -13
  1229. package/dist/statements/classes/members/constructors.js.map +1 -1
  1230. package/dist/statements/classes/members/methods.d.ts +1 -1
  1231. package/dist/statements/classes/members/methods.d.ts.map +1 -1
  1232. package/dist/statements/classes/members/methods.js +329 -76
  1233. package/dist/statements/classes/members/methods.js.map +1 -1
  1234. package/dist/statements/classes/members/orchestrator.d.ts +3 -3
  1235. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
  1236. package/dist/statements/classes/members/orchestrator.js +10 -4
  1237. package/dist/statements/classes/members/orchestrator.js.map +1 -1
  1238. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  1239. package/dist/statements/classes/members/properties.js +29 -5
  1240. package/dist/statements/classes/members/properties.js.map +1 -1
  1241. package/dist/statements/classes/members/shadowing.test.js +3 -2
  1242. package/dist/statements/classes/members/shadowing.test.js.map +1 -1
  1243. package/dist/statements/classes/parameters.d.ts +9 -1
  1244. package/dist/statements/classes/parameters.d.ts.map +1 -1
  1245. package/dist/statements/classes/parameters.js +86 -6
  1246. package/dist/statements/classes/parameters.js.map +1 -1
  1247. package/dist/statements/classes/properties.d.ts.map +1 -1
  1248. package/dist/statements/classes/properties.js +2 -1
  1249. package/dist/statements/classes/properties.js.map +1 -1
  1250. package/dist/statements/control/conditionals/branch-context.d.ts +58 -0
  1251. package/dist/statements/control/conditionals/branch-context.d.ts.map +1 -0
  1252. package/dist/statements/control/conditionals/branch-context.js +530 -0
  1253. package/dist/statements/control/conditionals/branch-context.js.map +1 -0
  1254. package/dist/statements/control/conditionals/branch-context.test.d.ts +2 -0
  1255. package/dist/statements/control/conditionals/branch-context.test.d.ts.map +1 -0
  1256. package/dist/statements/control/conditionals/branch-context.test.js +34 -0
  1257. package/dist/statements/control/conditionals/branch-context.test.js.map +1 -0
  1258. package/dist/statements/control/conditionals/guard-analysis.d.ts +8 -208
  1259. package/dist/statements/control/conditionals/guard-analysis.d.ts.map +1 -1
  1260. package/dist/statements/control/conditionals/guard-analysis.js +8 -763
  1261. package/dist/statements/control/conditionals/guard-analysis.js.map +1 -1
  1262. package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts +20 -0
  1263. package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts.map +1 -0
  1264. package/dist/statements/control/conditionals/guard-detectors-discriminant.js +214 -0
  1265. package/dist/statements/control/conditionals/guard-detectors-discriminant.js.map +1 -0
  1266. package/dist/statements/control/conditionals/guard-detectors-structural.d.ts +32 -0
  1267. package/dist/statements/control/conditionals/guard-detectors-structural.d.ts.map +1 -0
  1268. package/dist/statements/control/conditionals/guard-detectors-structural.js +302 -0
  1269. package/dist/statements/control/conditionals/guard-detectors-structural.js.map +1 -0
  1270. package/dist/statements/control/conditionals/guard-detectors.d.ts +11 -0
  1271. package/dist/statements/control/conditionals/guard-detectors.d.ts.map +1 -0
  1272. package/dist/statements/control/conditionals/guard-detectors.js +11 -0
  1273. package/dist/statements/control/conditionals/guard-detectors.js.map +1 -0
  1274. package/dist/statements/control/conditionals/guard-extraction.d.ts +30 -0
  1275. package/dist/statements/control/conditionals/guard-extraction.d.ts.map +1 -0
  1276. package/dist/statements/control/conditionals/guard-extraction.js +304 -0
  1277. package/dist/statements/control/conditionals/guard-extraction.js.map +1 -0
  1278. package/dist/statements/control/conditionals/guard-types.d.ts +214 -0
  1279. package/dist/statements/control/conditionals/guard-types.d.ts.map +1 -0
  1280. package/dist/statements/control/conditionals/guard-types.js +242 -0
  1281. package/dist/statements/control/conditionals/guard-types.js.map +1 -0
  1282. package/dist/statements/control/conditionals/if-emit-instanceof-guards.d.ts +28 -0
  1283. package/dist/statements/control/conditionals/if-emit-instanceof-guards.d.ts.map +1 -0
  1284. package/dist/statements/control/conditionals/if-emit-instanceof-guards.js +261 -0
  1285. package/dist/statements/control/conditionals/if-emit-instanceof-guards.js.map +1 -0
  1286. package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts +24 -0
  1287. package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts.map +1 -0
  1288. package/dist/statements/control/conditionals/if-emit-predicate-guards.js +165 -0
  1289. package/dist/statements/control/conditionals/if-emit-predicate-guards.js.map +1 -0
  1290. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts +24 -0
  1291. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts.map +1 -0
  1292. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js +391 -0
  1293. package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js.map +1 -0
  1294. package/dist/statements/control/conditionals/if-emit-type-guards.d.ts +10 -0
  1295. package/dist/statements/control/conditionals/if-emit-type-guards.d.ts.map +1 -0
  1296. package/dist/statements/control/conditionals/if-emit-type-guards.js +10 -0
  1297. package/dist/statements/control/conditionals/if-emit-type-guards.js.map +1 -0
  1298. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.d.ts +23 -0
  1299. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.d.ts.map +1 -0
  1300. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js +264 -0
  1301. package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js.map +1 -0
  1302. package/dist/statements/control/conditionals/if-emit-union-guards.d.ts +10 -0
  1303. package/dist/statements/control/conditionals/if-emit-union-guards.d.ts.map +1 -0
  1304. package/dist/statements/control/conditionals/if-emit-union-guards.js +10 -0
  1305. package/dist/statements/control/conditionals/if-emit-union-guards.js.map +1 -0
  1306. package/dist/statements/control/conditionals/if-emitter.d.ts +6 -3
  1307. package/dist/statements/control/conditionals/if-emitter.d.ts.map +1 -1
  1308. package/dist/statements/control/conditionals/if-emitter.js +99 -916
  1309. package/dist/statements/control/conditionals/if-emitter.js.map +1 -1
  1310. package/dist/statements/control/exceptions.d.ts.map +1 -1
  1311. package/dist/statements/control/exceptions.js +19 -2
  1312. package/dist/statements/control/exceptions.js.map +1 -1
  1313. package/dist/statements/control/loop-helpers.d.ts +13 -0
  1314. package/dist/statements/control/loop-helpers.d.ts.map +1 -0
  1315. package/dist/statements/control/loop-helpers.js +75 -0
  1316. package/dist/statements/control/loop-helpers.js.map +1 -0
  1317. package/dist/statements/control/loops.d.ts.map +1 -1
  1318. package/dist/statements/control/loops.js +85 -169
  1319. package/dist/statements/control/loops.js.map +1 -1
  1320. package/dist/statements/declarations/class-emitter-helpers.d.ts +17 -0
  1321. package/dist/statements/declarations/class-emitter-helpers.d.ts.map +1 -0
  1322. package/dist/statements/declarations/class-emitter-helpers.js +126 -0
  1323. package/dist/statements/declarations/class-emitter-helpers.js.map +1 -0
  1324. package/dist/statements/declarations/classes.d.ts.map +1 -1
  1325. package/dist/statements/declarations/classes.js +102 -27
  1326. package/dist/statements/declarations/classes.js.map +1 -1
  1327. package/dist/statements/declarations/function-local-emitter.d.ts +7 -0
  1328. package/dist/statements/declarations/function-local-emitter.d.ts.map +1 -0
  1329. package/dist/statements/declarations/function-local-emitter.js +363 -0
  1330. package/dist/statements/declarations/function-local-emitter.js.map +1 -0
  1331. package/dist/statements/declarations/function-module-emitter.d.ts +7 -0
  1332. package/dist/statements/declarations/function-module-emitter.d.ts.map +1 -0
  1333. package/dist/statements/declarations/function-module-emitter.js +372 -0
  1334. package/dist/statements/declarations/function-module-emitter.js.map +1 -0
  1335. package/dist/statements/declarations/function-shared.d.ts +43 -0
  1336. package/dist/statements/declarations/function-shared.d.ts.map +1 -0
  1337. package/dist/statements/declarations/function-shared.js +246 -0
  1338. package/dist/statements/declarations/function-shared.js.map +1 -0
  1339. package/dist/statements/declarations/functions.d.ts +2 -27
  1340. package/dist/statements/declarations/functions.d.ts.map +1 -1
  1341. package/dist/statements/declarations/functions.js +2 -709
  1342. package/dist/statements/declarations/functions.js.map +1 -1
  1343. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  1344. package/dist/statements/declarations/interfaces.js +25 -9
  1345. package/dist/statements/declarations/interfaces.js.map +1 -1
  1346. package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
  1347. package/dist/statements/declarations/type-aliases.js +3 -4
  1348. package/dist/statements/declarations/type-aliases.js.map +1 -1
  1349. package/dist/statements/declarations/variable-local-type.d.ts +36 -0
  1350. package/dist/statements/declarations/variable-local-type.d.ts.map +1 -0
  1351. package/dist/statements/declarations/variable-local-type.js +122 -0
  1352. package/dist/statements/declarations/variable-local-type.js.map +1 -0
  1353. package/dist/statements/declarations/variable-static-arrow.d.ts +47 -0
  1354. package/dist/statements/declarations/variable-static-arrow.d.ts.map +1 -0
  1355. package/dist/statements/declarations/variable-static-arrow.js +363 -0
  1356. package/dist/statements/declarations/variable-static-arrow.js.map +1 -0
  1357. package/dist/statements/declarations/variable-type-helpers.d.ts +86 -0
  1358. package/dist/statements/declarations/variable-type-helpers.d.ts.map +1 -0
  1359. package/dist/statements/declarations/variable-type-helpers.js +242 -0
  1360. package/dist/statements/declarations/variable-type-helpers.js.map +1 -0
  1361. package/dist/statements/declarations/variable-type-resolution.d.ts +11 -0
  1362. package/dist/statements/declarations/variable-type-resolution.d.ts.map +1 -0
  1363. package/dist/statements/declarations/variable-type-resolution.js +11 -0
  1364. package/dist/statements/declarations/variable-type-resolution.js.map +1 -0
  1365. package/dist/statements/declarations/variables.d.ts +5 -1
  1366. package/dist/statements/declarations/variables.d.ts.map +1 -1
  1367. package/dist/statements/declarations/variables.js +116 -596
  1368. package/dist/statements/declarations/variables.js.map +1 -1
  1369. package/dist/statements/index.test.d.ts +10 -5
  1370. package/dist/statements/index.test.d.ts.map +1 -1
  1371. package/dist/statements/index.test.js +10 -1969
  1372. package/dist/statements/index.test.js.map +1 -1
  1373. package/dist/statements/parameter-defaults.d.ts +17 -0
  1374. package/dist/statements/parameter-defaults.d.ts.map +1 -0
  1375. package/dist/statements/parameter-defaults.js +122 -0
  1376. package/dist/statements/parameter-defaults.js.map +1 -0
  1377. package/dist/statements/statement-cases/async-returns.test.d.ts +2 -0
  1378. package/dist/statements/statement-cases/async-returns.test.d.ts.map +1 -0
  1379. package/dist/statements/statement-cases/async-returns.test.js +311 -0
  1380. package/dist/statements/statement-cases/async-returns.test.js.map +1 -0
  1381. package/dist/statements/statement-cases/flow-and-void.test.d.ts +2 -0
  1382. package/dist/statements/statement-cases/flow-and-void.test.d.ts.map +1 -0
  1383. package/dist/statements/statement-cases/flow-and-void.test.js +405 -0
  1384. package/dist/statements/statement-cases/flow-and-void.test.js.map +1 -0
  1385. package/dist/statements/statement-cases/helpers.d.ts +6 -0
  1386. package/dist/statements/statement-cases/helpers.d.ts.map +1 -0
  1387. package/dist/statements/statement-cases/helpers.js +4 -0
  1388. package/dist/statements/statement-cases/helpers.js.map +1 -0
  1389. package/dist/statements/statement-cases/if-and-instanceof-guards.test.d.ts +2 -0
  1390. package/dist/statements/statement-cases/if-and-instanceof-guards.test.d.ts.map +1 -0
  1391. package/dist/statements/statement-cases/if-and-instanceof-guards.test.js +826 -0
  1392. package/dist/statements/statement-cases/if-and-instanceof-guards.test.js.map +1 -0
  1393. package/dist/statements/statement-cases/loops.test.d.ts +2 -0
  1394. package/dist/statements/statement-cases/loops.test.d.ts.map +1 -0
  1395. package/dist/statements/statement-cases/loops.test.js +433 -0
  1396. package/dist/statements/statement-cases/loops.test.js.map +1 -0
  1397. package/dist/statements/statement-cases/scopes-and-storage.test.d.ts +2 -0
  1398. package/dist/statements/statement-cases/scopes-and-storage.test.d.ts.map +1 -0
  1399. package/dist/statements/statement-cases/scopes-and-storage.test.js +216 -0
  1400. package/dist/statements/statement-cases/scopes-and-storage.test.js.map +1 -0
  1401. package/dist/statements/statement-cases/union-guards-basic.test.d.ts +2 -0
  1402. package/dist/statements/statement-cases/union-guards-basic.test.d.ts.map +1 -0
  1403. package/dist/statements/statement-cases/union-guards-basic.test.js +235 -0
  1404. package/dist/statements/statement-cases/union-guards-basic.test.js.map +1 -0
  1405. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.d.ts +2 -0
  1406. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.d.ts.map +1 -0
  1407. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js +265 -0
  1408. package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js.map +1 -0
  1409. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.d.ts +2 -0
  1410. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.d.ts.map +1 -0
  1411. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js +630 -0
  1412. package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js.map +1 -0
  1413. package/dist/statements/statement-cases/union-guards-remapped-a.test.d.ts +2 -0
  1414. package/dist/statements/statement-cases/union-guards-remapped-a.test.d.ts.map +1 -0
  1415. package/dist/statements/statement-cases/union-guards-remapped-a.test.js +382 -0
  1416. package/dist/statements/statement-cases/union-guards-remapped-a.test.js.map +1 -0
  1417. package/dist/statements/statement-cases/union-guards-remapped-b.test.d.ts +2 -0
  1418. package/dist/statements/statement-cases/union-guards-remapped-b.test.d.ts.map +1 -0
  1419. package/dist/statements/statement-cases/union-guards-remapped-b.test.js +397 -0
  1420. package/dist/statements/statement-cases/union-guards-remapped-b.test.js.map +1 -0
  1421. package/dist/type-assertion.test.js +258 -10
  1422. package/dist/type-assertion.test.js.map +1 -1
  1423. package/dist/types/arrays.d.ts.map +1 -1
  1424. package/dist/types/arrays.js +10 -1
  1425. package/dist/types/arrays.js.map +1 -1
  1426. package/dist/types/emitter.d.ts.map +1 -1
  1427. package/dist/types/emitter.js +129 -24
  1428. package/dist/types/emitter.js.map +1 -1
  1429. package/dist/types/index.test.js +205 -1
  1430. package/dist/types/index.test.js.map +1 -1
  1431. package/dist/types/objects.d.ts +2 -2
  1432. package/dist/types/objects.d.ts.map +1 -1
  1433. package/dist/types/objects.js +2 -2
  1434. package/dist/types/objects.js.map +1 -1
  1435. package/dist/types/parameters.d.ts.map +1 -1
  1436. package/dist/types/parameters.js +88 -18
  1437. package/dist/types/parameters.js.map +1 -1
  1438. package/dist/types/reference-lookup.d.ts +16 -0
  1439. package/dist/types/reference-lookup.d.ts.map +1 -0
  1440. package/dist/types/reference-lookup.js +133 -0
  1441. package/dist/types/reference-lookup.js.map +1 -0
  1442. package/dist/types/reference-structural-signatures.d.ts +10 -0
  1443. package/dist/types/reference-structural-signatures.d.ts.map +1 -0
  1444. package/dist/types/reference-structural-signatures.js +310 -0
  1445. package/dist/types/reference-structural-signatures.js.map +1 -0
  1446. package/dist/types/references-cases/array-and-cross-module.test.d.ts +2 -0
  1447. package/dist/types/references-cases/array-and-cross-module.test.d.ts.map +1 -0
  1448. package/dist/types/references-cases/array-and-cross-module.test.js +150 -0
  1449. package/dist/types/references-cases/array-and-cross-module.test.js.map +1 -0
  1450. package/dist/types/references-cases/bindings-and-local.test.d.ts +2 -0
  1451. package/dist/types/references-cases/bindings-and-local.test.d.ts.map +1 -0
  1452. package/dist/types/references-cases/bindings-and-local.test.js +368 -0
  1453. package/dist/types/references-cases/bindings-and-local.test.js.map +1 -0
  1454. package/dist/types/references-cases/helpers.d.ts +14 -0
  1455. package/dist/types/references-cases/helpers.d.ts.map +1 -0
  1456. package/dist/types/references-cases/helpers.js +39 -0
  1457. package/dist/types/references-cases/helpers.js.map +1 -0
  1458. package/dist/types/references-cases/polymorphic-and-recursive.test.d.ts +2 -0
  1459. package/dist/types/references-cases/polymorphic-and-recursive.test.d.ts.map +1 -0
  1460. package/dist/types/references-cases/polymorphic-and-recursive.test.js +387 -0
  1461. package/dist/types/references-cases/polymorphic-and-recursive.test.js.map +1 -0
  1462. package/dist/types/references-cases/primitive-and-builtins.test.d.ts +2 -0
  1463. package/dist/types/references-cases/primitive-and-builtins.test.d.ts.map +1 -0
  1464. package/dist/types/references-cases/primitive-and-builtins.test.js +116 -0
  1465. package/dist/types/references-cases/primitive-and-builtins.test.js.map +1 -0
  1466. package/dist/types/references-cases/resolved-and-imported.test.d.ts +2 -0
  1467. package/dist/types/references-cases/resolved-and-imported.test.d.ts.map +1 -0
  1468. package/dist/types/references-cases/resolved-and-imported.test.js +669 -0
  1469. package/dist/types/references-cases/resolved-and-imported.test.js.map +1 -0
  1470. package/dist/types/references.d.ts.map +1 -1
  1471. package/dist/types/references.js +250 -154
  1472. package/dist/types/references.js.map +1 -1
  1473. package/dist/types/references.test.d.ts +5 -10
  1474. package/dist/types/references.test.d.ts.map +1 -1
  1475. package/dist/types/references.test.js +5 -730
  1476. package/dist/types/references.test.js.map +1 -1
  1477. package/dist/types/unions-cases/basic-and-ordering.test.d.ts +6 -0
  1478. package/dist/types/unions-cases/basic-and-ordering.test.d.ts.map +1 -0
  1479. package/dist/types/unions-cases/basic-and-ordering.test.js +322 -0
  1480. package/dist/types/unions-cases/basic-and-ordering.test.js.map +1 -0
  1481. package/dist/types/unions-cases/large-and-fallback.test.d.ts +6 -0
  1482. package/dist/types/unions-cases/large-and-fallback.test.d.ts.map +1 -0
  1483. package/dist/types/unions-cases/large-and-fallback.test.js +246 -0
  1484. package/dist/types/unions-cases/large-and-fallback.test.js.map +1 -0
  1485. package/dist/types/unions-cases/multi-surface.test.d.ts +6 -0
  1486. package/dist/types/unions-cases/multi-surface.test.d.ts.map +1 -0
  1487. package/dist/types/unions-cases/multi-surface.test.js +268 -0
  1488. package/dist/types/unions-cases/multi-surface.test.js.map +1 -0
  1489. package/dist/types/unions.d.ts +1 -1
  1490. package/dist/types/unions.d.ts.map +1 -1
  1491. package/dist/types/unions.js +60 -65
  1492. package/dist/types/unions.js.map +1 -1
  1493. package/dist/types/unions.test.d.ts +3 -5
  1494. package/dist/types/unions.test.d.ts.map +1 -1
  1495. package/dist/types/unions.test.js +3 -413
  1496. package/dist/types/unions.test.js.map +1 -1
  1497. package/package.json +4 -4
@@ -1,1885 +1,239 @@
1
1
  /**
2
- * Call expression emitter
2
+ * Call expression emitter — main dispatch and orchestration.
3
+ *
4
+ * Routes call expressions to specialized emitters (promise, array interop,
5
+ * dynamic import, JSON, extension methods) and handles the default regular-call path.
6
+ *
7
+ * Extension method lowering lives in:
8
+ * - call-extension-methods.ts
3
9
  */
4
- import { getAwaitedIrType, isAwaitableIrType, } from "@tsonic/frontend";
5
10
  import { emitExpressionAst } from "../../expression-emitter.js";
6
11
  import { emitTypeArgumentsAst, generateSpecializedName, } from "../identifiers.js";
7
12
  import { emitTypeAst } from "../../type-emitter.js";
8
13
  import { emitMemberAccess } from "../access.js";
9
- import { isLValue, getPassingModifierFromCast, isJsonSerializerCall, isGlobalJsonCall, isInstanceMemberAccess, shouldEmitFluentExtensionCall, getTypeNamespace, registerJsonAotExpressionTypes, registerJsonAotType, needsIntCast, isPromiseChainMethod, isAsyncWrapperType, } from "./call-analysis.js";
10
- import { extractCalleeNameFromAst, getIdentifierTypeLeafName, } from "../../core/format/backend-ast/utils.js";
11
- import { resolveImportPath } from "../../core/semantic/index.js";
12
- import { containsTypeParameter } from "../../core/semantic/type-resolution.js";
13
- import { allocateLocalName } from "../../core/format/local-names.js";
14
- import { identifierExpression, identifierType, nullLiteral, stringLiteral, } from "../../core/format/backend-ast/builders.js";
15
- /**
16
- * Wrap an expression AST with an optional argument modifier (ref/out/in).
17
- */
18
- const wrapArgModifier = (modifier, expr) => modifier
19
- ? { kind: "argumentModifierExpression", modifier, expression: expr }
20
- : expr;
21
- /**
22
- * Wrap an invocation AST with an optional (int) cast.
23
- */
24
- const wrapIntCast = (needsCast, expr) => needsCast
25
- ? {
26
- kind: "castExpression",
27
- type: { kind: "predefinedType", keyword: "int" },
28
- expression: expr,
29
- }
30
- : expr;
31
- const stripClrGenericArity = (typeName) => typeName.replace(/`\d+$/, "");
32
- const nativeArrayMutationMembers = new Set([
33
- "push",
34
- "pop",
35
- "shift",
36
- "unshift",
37
- "splice",
38
- "sort",
39
- "reverse",
40
- "fill",
41
- "copyWithin",
42
- ]);
43
- const returnsMutatedArrayMember = (memberName) => memberName === "sort" ||
44
- memberName === "reverse" ||
45
- memberName === "fill" ||
46
- memberName === "copyWithin";
47
- const createVarLocal = (name, initializer) => ({
48
- kind: "localDeclarationStatement",
49
- modifiers: [],
50
- type: { kind: "varType" },
51
- declarators: [{ name, initializer }],
52
- });
53
- const captureAssignableArrayTarget = (expr, context) => {
54
- const [receiverAst, receiverContext] = emitExpressionAst(expr, context);
55
- if (receiverAst.kind === "identifierExpression") {
56
- return {
57
- readExpression: receiverAst,
58
- writeExpression: receiverAst,
59
- setupStatements: [],
60
- context: receiverContext,
61
- };
62
- }
63
- if (receiverAst.kind === "memberAccessExpression") {
64
- const objectTemp = allocateLocalName("__tsonic_arrayTarget", receiverContext);
65
- const objectIdentifier = {
66
- kind: "identifierExpression",
67
- identifier: objectTemp.emittedName,
68
- };
69
- return {
70
- readExpression: {
71
- kind: "memberAccessExpression",
72
- expression: objectIdentifier,
73
- memberName: receiverAst.memberName,
74
- },
75
- writeExpression: {
76
- kind: "memberAccessExpression",
77
- expression: objectIdentifier,
78
- memberName: receiverAst.memberName,
79
- },
80
- setupStatements: [
81
- createVarLocal(objectTemp.emittedName, receiverAst.expression),
82
- ],
83
- context: objectTemp.context,
84
- };
85
- }
86
- if (receiverAst.kind === "elementAccessExpression" &&
87
- receiverAst.arguments.length === 1) {
88
- const objectTemp = allocateLocalName("__tsonic_arrayTarget", receiverContext);
89
- const indexTemp = allocateLocalName("__tsonic_arrayIndex", objectTemp.context);
90
- const objectIdentifier = {
91
- kind: "identifierExpression",
92
- identifier: objectTemp.emittedName,
93
- };
94
- const indexIdentifier = {
95
- kind: "identifierExpression",
96
- identifier: indexTemp.emittedName,
97
- };
98
- const indexArgument = receiverAst.arguments[0];
99
- if (!indexArgument)
100
- return undefined;
101
- return {
102
- readExpression: {
103
- kind: "elementAccessExpression",
104
- expression: objectIdentifier,
105
- arguments: [indexIdentifier],
106
- },
107
- writeExpression: {
108
- kind: "elementAccessExpression",
109
- expression: objectIdentifier,
110
- arguments: [indexIdentifier],
111
- },
112
- setupStatements: [
113
- createVarLocal(objectTemp.emittedName, receiverAst.expression),
114
- createVarLocal(indexTemp.emittedName, indexArgument),
115
- ],
116
- context: indexTemp.context,
117
- };
14
+ import { isJsonSerializerCall, isGlobalJsonCall, isInstanceMemberAccess, needsIntCast, } from "./call-analysis.js";
15
+ import { extractCalleeNameFromAst } from "../../core/format/backend-ast/utils.js";
16
+ import { identifierExpression, identifierType, } from "../../core/format/backend-ast/builders.js";
17
+ import { normalizeClrQualifiedName } from "../../core/format/backend-ast/utils.js";
18
+ import { resolveStructuralViewMethodSurface } from "../../core/semantic/structural-view-types.js";
19
+ // Import from split modules
20
+ import { emitDynamicImportCall } from "./call-dynamic-import.js";
21
+ import { emitJsonSerializerCall, emitGlobalJsonCall } from "./call-json.js";
22
+ import { emitGlobalSymbolCall } from "./call-symbol.js";
23
+ import { emitPromiseStaticCall, emitPromiseThenCatchFinally, buildDelegateType, } from "./call-promise.js";
24
+ import { emitArrayMutationInteropCall, emitArrayWrapperInteropCall, } from "./call-array-interop.js";
25
+ import { emitRuntimeUnionArrayIsArrayCall } from "./call-runtime-union-guards.js";
26
+ import { emitCallArguments, wrapIntCast } from "./call-arguments.js";
27
+ import { tryEmitExtensionMethodCall } from "./call-extension-methods.js";
28
+ import { stripClrGenericArity } from "../access-resolution.js";
29
+ const buildCallTargetExpectedType = (expr, preferParameterTypes = false) => {
30
+ const calleeType = expr.callee.inferredType;
31
+ if (!preferParameterTypes && calleeType?.kind === "functionType") {
32
+ return calleeType;
118
33
  }
119
- return undefined;
120
- };
121
- const emitArrayMutationInteropCall = (expr, context) => {
122
- if (expr.isOptional)
123
- return undefined;
124
- if (expr.callee.kind !== "memberAccess")
125
- return undefined;
126
- if (expr.callee.isComputed)
127
- return undefined;
128
- if (typeof expr.callee.property !== "string")
129
- return undefined;
130
- if (!nativeArrayMutationMembers.has(expr.callee.property))
131
- return undefined;
132
- if (!isLValue(expr.callee.object))
133
- return undefined;
134
- const binding = expr.callee.memberBinding;
135
- if (!binding || binding.isExtensionMethod)
136
- return undefined;
137
- const receiverType = expr.callee.object.inferredType;
138
- if (!receiverType || receiverType.kind !== "arrayType")
34
+ const parameterTypes = expr.parameterTypes ?? expr.surfaceParameterTypes;
35
+ const restParameter = expr.restParameter ?? expr.surfaceRestParameter;
36
+ if (!parameterTypes || !expr.inferredType) {
139
37
  return undefined;
140
- const captured = captureAssignableArrayTarget(expr.callee.object, context);
141
- if (!captured)
142
- return undefined;
143
- let currentContext = captured.context;
144
- const [elementTypeAst, elementTypeContext] = emitTypeAst(receiverType.elementType, currentContext);
145
- currentContext = elementTypeContext;
146
- const wrapperTemp = allocateLocalName("__tsonic_arrayWrapper", currentContext);
147
- currentContext = wrapperTemp.context;
148
- const resultTemp = allocateLocalName("__tsonic_arrayResult", currentContext);
149
- currentContext = resultTemp.context;
150
- const wrapperIdentifier = {
151
- kind: "identifierExpression",
152
- identifier: wrapperTemp.emittedName,
153
- };
154
- const resultIdentifier = {
155
- kind: "identifierExpression",
156
- identifier: resultTemp.emittedName,
157
- };
158
- const [argAsts, argContext] = emitCallArguments(expr.arguments, expr, currentContext);
159
- currentContext = argContext;
160
- const mutationCall = {
161
- kind: "invocationExpression",
162
- expression: {
163
- kind: "memberAccessExpression",
164
- expression: wrapperIdentifier,
165
- memberName: binding.member,
166
- },
167
- arguments: argAsts,
168
- };
169
- const mutatedArrayAst = {
170
- kind: "invocationExpression",
171
- expression: {
172
- kind: "memberAccessExpression",
173
- expression: wrapperIdentifier,
174
- memberName: "toArray",
175
- },
176
- arguments: [],
177
- };
178
- let returnExpression = resultIdentifier;
179
- if (expr.callee.property === "splice") {
180
- returnExpression = {
181
- kind: "invocationExpression",
182
- expression: {
183
- kind: "memberAccessExpression",
184
- expression: resultIdentifier,
185
- memberName: "toArray",
186
- },
187
- arguments: [],
188
- };
189
38
  }
190
- else if (returnsMutatedArrayMember(expr.callee.property)) {
191
- returnExpression = mutatedArrayAst;
192
- }
193
- const returnType = expr.inferredType ?? receiverType;
194
- const [returnTypeAst, returnTypeContext] = emitTypeAst(returnType, currentContext);
195
- currentContext = returnTypeContext;
196
- const lambdaAst = {
197
- kind: "lambdaExpression",
198
- isAsync: false,
199
- parameters: [],
200
- body: {
201
- kind: "blockStatement",
202
- statements: [
203
- ...captured.setupStatements,
204
- createVarLocal(wrapperTemp.emittedName, {
205
- kind: "objectCreationExpression",
206
- type: identifierType("global::Tsonic.JSRuntime.JSArray", [
207
- elementTypeAst,
208
- ]),
209
- arguments: [captured.readExpression],
210
- }),
211
- createVarLocal(resultTemp.emittedName, mutationCall),
212
- {
213
- kind: "expressionStatement",
214
- expression: {
215
- kind: "assignmentExpression",
216
- operatorToken: "=",
217
- left: captured.writeExpression,
218
- right: mutatedArrayAst,
219
- },
220
- },
221
- {
222
- kind: "returnStatement",
223
- expression: returnExpression,
224
- },
225
- ],
226
- },
227
- };
228
- const delegateCastAst = {
229
- kind: "castExpression",
230
- type: buildDelegateType([], returnTypeAst),
231
- expression: {
232
- kind: "parenthesizedExpression",
233
- expression: lambdaAst,
234
- },
235
- };
236
- return [
237
- wrapIntCast(needsIntCast(expr, expr.callee.property), {
238
- kind: "invocationExpression",
239
- expression: {
240
- kind: "parenthesizedExpression",
241
- expression: delegateCastAst,
39
+ return {
40
+ kind: "functionType",
41
+ parameters: parameterTypes.map((parameterType, index) => ({
42
+ kind: "parameter",
43
+ pattern: {
44
+ kind: "identifierPattern",
45
+ name: `__tsonic_arg_${index}`,
242
46
  },
243
- arguments: [],
244
- }),
245
- currentContext,
246
- ];
247
- };
248
- const emitArrayWrapperInteropCall = (expr, context) => {
249
- if (expr.isOptional)
250
- return undefined;
251
- if (expr.callee.kind !== "memberAccess")
252
- return undefined;
253
- if (expr.callee.isComputed)
254
- return undefined;
255
- if (typeof expr.callee.property !== "string")
256
- return undefined;
257
- const binding = expr.callee.memberBinding;
258
- if (!binding || binding.isExtensionMethod)
259
- return undefined;
260
- const receiverType = expr.callee.object.inferredType;
261
- if (!receiverType || receiverType.kind !== "arrayType")
262
- return undefined;
263
- const bindingType = binding.type;
264
- if (bindingType === "System.Array" ||
265
- bindingType === "global::System.Array" ||
266
- bindingType.startsWith("System.Array`") ||
267
- bindingType.startsWith("global::System.Array`")) {
268
- return undefined;
269
- }
270
- const arityText = bindingType.match(/`(\d+)$/)?.[1];
271
- const genericArity = arityText ? Number.parseInt(arityText, 10) : 0;
272
- if (genericArity > 1)
273
- return undefined;
274
- let currentContext = context;
275
- const [receiverAst, receiverContext] = emitExpressionAst(expr.callee.object, currentContext);
276
- currentContext = receiverContext;
277
- let typeArguments;
278
- if (genericArity === 1) {
279
- const [elementTypeAst, elementTypeContext] = emitTypeAst(receiverType.elementType, currentContext);
280
- currentContext = elementTypeContext;
281
- typeArguments = [elementTypeAst];
282
- }
283
- const wrapperAst = {
284
- kind: "objectCreationExpression",
285
- type: identifierType(`global::${stripClrGenericArity(bindingType)}`, typeArguments),
286
- arguments: [receiverAst],
47
+ type: restParameter && restParameter.index === index
48
+ ? (restParameter.arrayType ?? parameterType)
49
+ : parameterType,
50
+ initializer: undefined,
51
+ isOptional: false,
52
+ isRest: restParameter?.index === index,
53
+ passing: expr.argumentPassing?.[index] ?? "value",
54
+ })),
55
+ returnType: expr.inferredType,
287
56
  };
288
- const [argAsts, argContext] = emitCallArguments(expr.arguments, expr, currentContext);
289
- currentContext = argContext;
290
- const invocation = {
291
- kind: "invocationExpression",
292
- expression: {
293
- kind: "memberAccessExpression",
294
- expression: wrapperAst,
295
- memberName: binding.member,
296
- },
297
- arguments: argAsts,
298
- };
299
- const resultAst = expr.inferredType?.kind === "arrayType"
300
- ? {
301
- kind: "invocationExpression",
302
- expression: {
303
- kind: "memberAccessExpression",
304
- expression: invocation,
305
- memberName: "toArray",
306
- },
307
- arguments: [],
308
- }
309
- : invocation;
310
- return [
311
- wrapIntCast(needsIntCast(expr, expr.callee.property), resultAst),
312
- currentContext,
313
- ];
314
- };
315
- const isTaskTypeAst = (typeAst) => getIdentifierTypeLeafName(typeAst) === "Task";
316
- const containsVoidTypeAst = (typeAst) => {
317
- if (typeAst.kind === "predefinedType" && typeAst.keyword === "void") {
318
- return true;
319
- }
320
- if (typeAst.kind === "identifierType") {
321
- if (typeAst.name === "void") {
322
- return true;
323
- }
324
- return (typeAst.typeArguments ?? []).some((t) => containsVoidTypeAst(t));
325
- }
326
- if (typeAst.kind === "qualifiedIdentifierType") {
327
- if (getIdentifierTypeLeafName(typeAst) === "void") {
328
- return true;
329
- }
330
- return (typeAst.typeArguments ?? []).some((t) => containsVoidTypeAst(t));
331
- }
332
- if (typeAst.kind === "arrayType") {
333
- return containsVoidTypeAst(typeAst.elementType);
334
- }
335
- if (typeAst.kind === "nullableType") {
336
- return containsVoidTypeAst(typeAst.underlyingType);
337
- }
338
- if (typeAst.kind === "pointerType") {
339
- return containsVoidTypeAst(typeAst.elementType);
340
- }
341
- if (typeAst.kind === "tupleType") {
342
- return typeAst.elements.some((e) => containsVoidTypeAst(e.type));
343
- }
344
- return false;
345
57
  };
346
- const getTaskResultType = (typeAst) => {
347
- if (!isTaskTypeAst(typeAst)) {
348
- return undefined;
349
- }
350
- if (typeAst.kind !== "identifierType" &&
351
- typeAst.kind !== "qualifiedIdentifierType") {
352
- return undefined;
58
+ const resolveStructuralViewCallParameterTypes = (callee, context) => resolveStructuralViewMethodSurface(callee, context)?.parameterTypes;
59
+ const extractTransparentIdentifier = (expr) => {
60
+ let current = expr;
61
+ while (current.kind === "typeAssertion" ||
62
+ current.kind === "numericNarrowing") {
63
+ current = current.expression;
353
64
  }
354
- return typeAst.typeArguments?.length === 1
355
- ? typeAst.typeArguments[0]
356
- : undefined;
65
+ return current.kind === "identifier" ? current : undefined;
357
66
  };
358
- const callbackParameterCount = (callbackExpr) => {
359
- if (callbackExpr.kind === "arrowFunction" ||
360
- callbackExpr.kind === "functionExpression") {
361
- return callbackExpr.parameters.length;
67
+ const normalizePromiseResolveCall = (expr, context) => {
68
+ const transparentCalleeIdentifier = extractTransparentIdentifier(expr.callee);
69
+ if (!transparentCalleeIdentifier) {
70
+ return expr;
362
71
  }
363
- const callbackType = callbackExpr.inferredType;
364
- if (callbackType?.kind === "functionType") {
365
- return callbackType.parameters.length;
72
+ const promisedValueType = context.promiseResolveValueTypes?.get(transparentCalleeIdentifier.name);
73
+ if (!promisedValueType) {
74
+ return expr;
366
75
  }
367
- return 1;
368
- };
369
- const collectBlockReturnTypes = (block) => {
370
- const collectFromStatement = (statement) => {
371
- switch (statement.kind) {
372
- case "returnStatement":
373
- return statement.expression?.inferredType
374
- ? [statement.expression.inferredType]
375
- : [];
376
- case "blockStatement":
377
- return statement.statements.flatMap(collectFromStatement);
378
- case "ifStatement":
379
- return [
380
- ...collectFromStatement(statement.thenStatement),
381
- ...(statement.elseStatement
382
- ? collectFromStatement(statement.elseStatement)
383
- : []),
384
- ];
385
- case "whileStatement":
386
- case "forStatement":
387
- case "forOfStatement":
388
- case "forInStatement":
389
- return collectFromStatement(statement.body);
390
- case "switchStatement":
391
- return statement.cases.flatMap((switchCase) => switchCase.statements.flatMap(collectFromStatement));
392
- case "tryStatement":
393
- return [
394
- ...statement.tryBlock.statements.flatMap(collectFromStatement),
395
- ...(statement.catchClause
396
- ? statement.catchClause.body.statements.flatMap(collectFromStatement)
397
- : []),
398
- ...(statement.finallyBlock
399
- ? statement.finallyBlock.statements.flatMap(collectFromStatement)
400
- : []),
401
- ];
402
- case "functionDeclaration":
403
- case "classDeclaration":
404
- case "interfaceDeclaration":
405
- case "enumDeclaration":
406
- case "typeAliasDeclaration":
407
- return [];
408
- default:
409
- return [];
410
- }
76
+ return {
77
+ ...expr,
78
+ callee: transparentCalleeIdentifier,
79
+ parameterTypes: [promisedValueType],
80
+ surfaceParameterTypes: [promisedValueType],
81
+ restParameter: undefined,
82
+ surfaceRestParameter: undefined,
411
83
  };
412
- return block.statements.flatMap(collectFromStatement);
413
84
  };
414
- const getCallbackDelegateReturnType = (callbackExpr) => {
415
- if ((callbackExpr.kind === "arrowFunction" ||
416
- callbackExpr.kind === "functionExpression") &&
417
- callbackExpr.body.kind === "blockStatement") {
418
- const returnTypes = collectBlockReturnTypes(callbackExpr.body);
419
- const concreteReturnTypes = returnTypes.filter((type) => !isVoidOrUnknownIrType(type));
420
- if (concreteReturnTypes.length === 0) {
421
- return undefined;
422
- }
423
- const deduped = concreteReturnTypes.filter((type, index, all) => all.findIndex((candidate) => stableIrTypeKey(candidate) === stableIrTypeKey(type)) === index);
424
- if (deduped.length === 1) {
425
- return deduped[0];
426
- }
427
- return {
428
- kind: "unionType",
429
- types: deduped,
430
- };
431
- }
432
- return getCallbackReturnType(callbackExpr);
433
- };
434
- const callbackReturnsAsyncWrapper = (callbackExpr) => {
435
- const delegateReturnType = getCallbackDelegateReturnType(callbackExpr);
436
- return delegateReturnType ? isAsyncWrapperType(delegateReturnType) : false;
437
- };
438
- const buildInvocation = (expression, args) => ({
439
- kind: "invocationExpression",
440
- expression,
441
- arguments: args,
442
- });
443
- const buildAwait = (expression) => ({
444
- kind: "awaitExpression",
445
- expression,
446
- });
447
- const buildDelegateType = (parameterTypes, returnType) => {
448
- const isVoidReturn = returnType?.kind === "predefinedType" && returnType.keyword === "void";
449
- if (returnType === undefined) {
450
- return parameterTypes.length === 0
451
- ? identifierType("global::System.Action")
452
- : identifierType("global::System.Action", parameterTypes);
453
- }
454
- if (isVoidReturn || getIdentifierTypeLeafName(returnType) === "void") {
455
- return parameterTypes.length === 0
456
- ? identifierType("global::System.Action")
457
- : identifierType("global::System.Action", parameterTypes);
458
- }
459
- return identifierType("global::System.Func", [...parameterTypes, returnType]);
460
- };
461
- const isVoidOrUnknownIrType = (type) => type === undefined ||
462
- type.kind === "voidType" ||
463
- type.kind === "unknownType" ||
464
- (type.kind === "primitiveType" && type.name === "undefined");
465
- const getCallbackReturnType = (callbackExpr) => {
466
- if (callbackExpr.kind === "arrowFunction" &&
467
- callbackExpr.body.kind !== "blockStatement" &&
468
- !isVoidOrUnknownIrType(callbackExpr.body.inferredType)) {
469
- return callbackExpr.body.inferredType;
470
- }
471
- const declared = callbackExpr.inferredType?.kind === "functionType"
472
- ? callbackExpr.inferredType.returnType
473
- : undefined;
474
- if (!isVoidOrUnknownIrType(declared)) {
475
- return declared;
476
- }
477
- if (callbackExpr.kind === "arrowFunction" &&
478
- callbackExpr.body.kind !== "blockStatement") {
479
- return callbackExpr.body.inferredType;
480
- }
481
- return undefined;
482
- };
483
- const getFunctionValueSignature = (expr) => {
484
- const calleeType = expr.callee.inferredType;
485
- if (!calleeType || calleeType.kind !== "functionType")
486
- return undefined;
487
- if (expr.callee.kind === "identifier" && expr.callee.resolvedClrType) {
85
+ const tryGetCallableStaticAccessorCall = (expr) => {
86
+ if (expr.callee.kind !== "memberAccess") {
488
87
  return undefined;
489
88
  }
490
- if (expr.callee.kind === "memberAccess" && expr.callee.memberBinding) {
89
+ const memberBinding = expr.callee.memberBinding;
90
+ const kind = memberBinding?.emitSemantics?.callableStaticAccessorKind;
91
+ if (!memberBinding || !kind) {
491
92
  return undefined;
492
93
  }
493
- return calleeType;
94
+ return { kind, binding: memberBinding };
494
95
  };
495
- const emitFunctionValueCallArguments = (args, signature, expr, context) => {
496
- let currentContext = context;
497
- const argAsts = [];
498
- const parameters = signature.parameters;
499
- const extractTupleRestCandidates = (type) => {
500
- if (!type)
501
- return undefined;
502
- if (type.kind === "tupleType") {
503
- return [type.elementTypes];
504
- }
505
- if (type.kind !== "unionType") {
506
- return undefined;
507
- }
508
- const candidates = [];
509
- for (const member of type.types) {
510
- if (!member || member.kind !== "tupleType") {
511
- return undefined;
512
- }
513
- candidates.push(member.elementTypes);
514
- }
515
- return candidates;
516
- };
517
- const tryEmitTupleRestArguments = (startIndex, parameterType) => {
518
- const remainingArgs = args.slice(startIndex);
519
- if (remainingArgs.some((arg) => arg?.kind === "spread")) {
520
- return undefined;
521
- }
522
- const tupleCandidates = extractTupleRestCandidates(parameterType);
523
- if (!tupleCandidates || tupleCandidates.length === 0) {
524
- return undefined;
525
- }
526
- const matchingCandidates = tupleCandidates.filter((candidate) => candidate.length === remainingArgs.length);
527
- if (matchingCandidates.length !== 1) {
528
- return undefined;
529
- }
530
- const tupleElements = matchingCandidates[0] ?? [];
531
- const emittedArgs = [];
532
- let tupleContext = currentContext;
533
- for (let index = 0; index < remainingArgs.length; index++) {
534
- const arg = remainingArgs[index];
535
- const expectedType = tupleElements[index];
536
- if (!arg)
537
- continue;
538
- const [argAst, argContext] = emitExpressionAst(arg, tupleContext, expectedType);
539
- emittedArgs.push(argAst);
540
- tupleContext = argContext;
541
- }
542
- return [emittedArgs, tupleContext];
543
- };
544
- for (let i = 0; i < parameters.length; i++) {
545
- const parameter = parameters[i];
546
- if (!parameter)
547
- continue;
548
- if (parameter.isRest) {
549
- const tupleRestResult = tryEmitTupleRestArguments(i, parameter.type);
550
- if (tupleRestResult) {
551
- const [tupleArgs, tupleContext] = tupleRestResult;
552
- argAsts.push(...tupleArgs);
553
- currentContext = tupleContext;
554
- break;
555
- }
556
- const spreadArg = args[i];
557
- if (args.length === i + 1 && spreadArg && spreadArg.kind === "spread") {
558
- const [spreadAst, spreadCtx] = emitExpressionAst(spreadArg.expression, currentContext);
559
- argAsts.push(spreadAst);
560
- currentContext = spreadCtx;
561
- break;
562
- }
563
- const restElementType = parameter.type?.kind === "arrayType"
564
- ? parameter.type.elementType
565
- : undefined;
566
- let elementTypeAst = {
567
- kind: "predefinedType",
568
- keyword: "object",
569
- };
570
- if (restElementType) {
571
- const [emittedType, typeCtx] = emitTypeAst(restElementType, currentContext);
572
- elementTypeAst = emittedType;
573
- currentContext = typeCtx;
574
- }
575
- const restItems = [];
576
- for (let j = i; j < args.length; j++) {
577
- const arg = args[j];
578
- if (!arg)
579
- continue;
580
- if (arg.kind === "spread") {
581
- const [spreadAst, spreadCtx] = emitExpressionAst(arg.expression, currentContext);
582
- argAsts.push(spreadAst);
583
- currentContext = spreadCtx;
584
- return [argAsts, currentContext];
585
- }
586
- const [argAst, argCtx] = emitExpressionAst(arg, currentContext, restElementType);
587
- restItems.push(argAst);
588
- currentContext = argCtx;
589
- }
590
- argAsts.push({
591
- kind: "arrayCreationExpression",
592
- elementType: elementTypeAst,
593
- initializer: restItems,
594
- });
595
- break;
596
- }
597
- const arg = args[i];
598
- if (arg) {
599
- const [argAst, argCtx] = emitExpressionAst(arg, currentContext, parameter.type);
600
- const modifier = expr.argumentPassing?.[i] &&
601
- expr.argumentPassing[i] !== "value" &&
602
- isLValue(arg)
603
- ? expr.argumentPassing[i]
604
- : undefined;
605
- argAsts.push(wrapArgModifier(modifier, argAst));
606
- currentContext = argCtx;
607
- continue;
608
- }
609
- if (parameter.isOptional || parameter.initializer) {
610
- let defaultType;
611
- if (parameter.type) {
612
- const [emittedType, typeCtx] = emitTypeAst(parameter.type, currentContext);
613
- currentContext = typeCtx;
614
- defaultType =
615
- parameter.isOptional || parameter.initializer
616
- ? emittedType.kind === "nullableType"
617
- ? emittedType
618
- : { kind: "nullableType", underlyingType: emittedType }
619
- : emittedType;
620
- }
621
- argAsts.push({ kind: "defaultExpression", type: defaultType });
622
- }
96
+ const getCallableStaticAccessorOwnerTypeArgs = (expr, expectedArity) => {
97
+ if (expectedArity === 0) {
98
+ return [];
623
99
  }
624
- return [argAsts, currentContext];
625
- };
626
- const isArrayLikeIrType = (type) => {
627
- if (!type)
628
- return false;
629
- if (type.kind === "arrayType" || type.kind === "tupleType") {
630
- return true;
100
+ if (expr.typeArguments?.length === expectedArity) {
101
+ return expr.typeArguments;
631
102
  }
632
- if (type.kind === "unionType") {
633
- return type.types.every((member) => isArrayLikeIrType(member));
103
+ const inferredResult = expr.inferredType;
104
+ if (inferredResult?.kind === "referenceType" &&
105
+ inferredResult.typeArguments?.length === expectedArity) {
106
+ return inferredResult.typeArguments;
634
107
  }
635
- if (type.kind !== "referenceType") {
636
- return false;
637
- }
638
- const simpleName = type.name.split(".").pop() ?? type.name;
639
- return (simpleName === "Array" ||
640
- simpleName === "ReadonlyArray" ||
641
- simpleName === "JSArray" ||
642
- simpleName === "Iterable" ||
643
- simpleName === "IterableIterator" ||
644
- simpleName === "IEnumerable" ||
645
- simpleName === "IReadOnlyList" ||
646
- simpleName === "List");
108
+ throw new Error(`Internal Compiler Error: callable static accessor call '${expectedArity}' generic arity could not be specialized from call-site type arguments.`);
647
109
  };
648
- const detectRestParameterInfo = (args, parameterTypes) => {
649
- if (parameterTypes.length === 0) {
650
- return undefined;
651
- }
652
- const index = parameterTypes.length - 1;
653
- const lastParamType = parameterTypes[index];
654
- if (!lastParamType || lastParamType.kind !== "arrayType") {
655
- return undefined;
656
- }
657
- if (args.length > parameterTypes.length) {
658
- return {
659
- index,
660
- arrayType: lastParamType,
661
- elementType: lastParamType.elementType,
662
- };
663
- }
664
- const restArgs = args.slice(index);
665
- if (restArgs.some((arg) => arg?.kind === "spread")) {
666
- return {
667
- index,
668
- arrayType: lastParamType,
669
- elementType: lastParamType.elementType,
670
- };
671
- }
672
- const lastArg = args[index];
673
- if (!lastArg) {
674
- return undefined;
110
+ const emitCallableStaticAccessorCall = (expr, binding, context) => {
111
+ if (expr.arguments.length !== 0) {
112
+ throw new Error(`Internal Compiler Error: callable static accessor '${binding.type}.${binding.member}' was invoked with arguments.`);
675
113
  }
676
- const lastArgType = lastArg.kind === "spread"
677
- ? lastArg.expression.inferredType
678
- : lastArg.inferredType;
679
- if (!isArrayLikeIrType(lastArgType)) {
680
- return {
681
- index,
682
- arrayType: lastParamType,
683
- elementType: lastParamType.elementType,
684
- };
114
+ if (expr.isOptional) {
115
+ throw new Error(`Internal Compiler Error: callable static accessor '${binding.type}.${binding.member}' cannot be optional.`);
685
116
  }
686
- return undefined;
687
- };
688
- const emitFlattenedRestArguments = (restArgs, restElementType, context) => {
117
+ const arityText = binding.type.match(/`(\d+)$/)?.[1];
118
+ const genericArity = arityText ? Number.parseInt(arityText, 10) : 0;
119
+ const ownerTypeArgs = getCallableStaticAccessorOwnerTypeArgs(expr, genericArity);
689
120
  let currentContext = context;
690
- const [elementTypeAst, typeContext] = emitTypeAst(restElementType, currentContext);
691
- currentContext = typeContext;
692
- const segments = [];
693
- let inlineElements = [];
694
- const flushInlineElements = () => {
695
- if (inlineElements.length === 0)
696
- return;
697
- segments.push({
698
- kind: "arrayCreationExpression",
699
- elementType: elementTypeAst,
700
- initializer: inlineElements,
701
- });
702
- inlineElements = [];
703
- };
704
- for (const arg of restArgs) {
705
- if (!arg)
706
- continue;
707
- if (arg.kind === "spread") {
708
- flushInlineElements();
709
- const [spreadAst, spreadContext] = emitExpressionAst(arg.expression, currentContext);
710
- segments.push(spreadAst);
711
- currentContext = spreadContext;
712
- continue;
713
- }
714
- const [argAst, argContext] = emitExpressionAst(arg, currentContext, restElementType);
715
- inlineElements.push(argAst);
716
- currentContext = argContext;
717
- }
718
- flushInlineElements();
719
- if (segments.length === 0) {
720
- return [
721
- [
722
- {
723
- kind: "invocationExpression",
724
- expression: {
725
- ...identifierExpression("global::System.Array.Empty"),
726
- },
727
- typeArguments: [elementTypeAst],
728
- arguments: [],
729
- },
730
- ],
731
- currentContext,
732
- ];
733
- }
734
- const firstSegment = segments[0];
735
- if (!firstSegment) {
736
- return [
737
- [
738
- {
739
- kind: "arrayCreationExpression",
740
- elementType: elementTypeAst,
741
- initializer: [],
742
- },
743
- ],
744
- currentContext,
745
- ];
746
- }
747
- let concatAst = firstSegment;
748
- for (let index = 1; index < segments.length; index++) {
749
- const segment = segments[index];
750
- if (!segment)
751
- continue;
752
- concatAst = {
753
- kind: "invocationExpression",
754
- expression: {
755
- ...identifierExpression("global::System.Linq.Enumerable.Concat"),
756
- },
757
- arguments: [concatAst, segment],
758
- };
121
+ const ownerTypeArgAsts = [];
122
+ for (const typeArgument of ownerTypeArgs) {
123
+ const [typeArgAst, typeArgContext] = emitTypeAst(typeArgument, currentContext);
124
+ ownerTypeArgAsts.push(typeArgAst);
125
+ currentContext = typeArgContext;
759
126
  }
127
+ const ownerTypeAst = identifierType(normalizeClrQualifiedName(stripClrGenericArity(binding.type), true), ownerTypeArgAsts.length > 0 ? ownerTypeArgAsts : undefined);
760
128
  return [
761
- [
762
- {
763
- kind: "invocationExpression",
764
- expression: {
765
- ...identifierExpression("global::System.Linq.Enumerable.ToArray"),
766
- },
767
- arguments: [concatAst],
768
- },
769
- ],
770
- currentContext,
771
- ];
772
- };
773
- const stableIrTypeKey = (type) => JSON.stringify(type);
774
- const isAsyncWrapperIrTypeLike = (type) => {
775
- return isAwaitableIrType(type);
776
- };
777
- const containsPromiseChainArtifact = (type) => {
778
- if (!type)
779
- return false;
780
- if (isAsyncWrapperIrTypeLike(type)) {
781
- return true;
782
- }
783
- if (type.kind === "unionType" || type.kind === "intersectionType") {
784
- return type.types.some((member) => !!member && containsPromiseChainArtifact(member));
785
- }
786
- return false;
787
- };
788
- const normalizePromiseChainResultIrType = (type) => {
789
- if (!type)
790
- return undefined;
791
- const awaited = getAwaitedIrType(type);
792
- if (awaited) {
793
- return awaited.kind === "voidType"
794
- ? awaited
795
- : normalizePromiseChainResultIrType(awaited);
796
- }
797
- if (type.kind === "unionType") {
798
- const normalizedTypes = [];
799
- const seen = new Set();
800
- for (const member of type.types) {
801
- if (!member)
802
- continue;
803
- const normalized = normalizePromiseChainResultIrType(member);
804
- if (!normalized)
805
- continue;
806
- const key = stableIrTypeKey(normalized);
807
- if (seen.has(key))
808
- continue;
809
- seen.add(key);
810
- normalizedTypes.push(normalized);
811
- }
812
- if (normalizedTypes.length === 0)
813
- return undefined;
814
- if (normalizedTypes.length === 1)
815
- return normalizedTypes[0];
816
- return {
817
- kind: "unionType",
818
- types: normalizedTypes,
819
- };
820
- }
821
- return type;
822
- };
823
- const mergePromiseChainResultIrTypes = (...types) => {
824
- const merged = [];
825
- const seen = new Set();
826
- for (const type of types) {
827
- const normalized = normalizePromiseChainResultIrType(type);
828
- if (!normalized)
829
- continue;
830
- if (normalized.kind === "unionType") {
831
- for (const member of normalized.types) {
832
- if (!member)
833
- continue;
834
- const key = stableIrTypeKey(member);
835
- if (seen.has(key))
836
- continue;
837
- seen.add(key);
838
- merged.push(member);
839
- }
840
- continue;
841
- }
842
- const key = stableIrTypeKey(normalized);
843
- if (seen.has(key))
844
- continue;
845
- seen.add(key);
846
- merged.push(normalized);
847
- }
848
- if (merged.length === 0)
849
- return undefined;
850
- if (merged.length === 1)
851
- return merged[0];
852
- return {
853
- kind: "unionType",
854
- types: merged,
855
- };
856
- };
857
- const buildTaskTypeAst = (resultType) => resultType
858
- ? identifierType("global::System.Threading.Tasks.Task", [resultType])
859
- : identifierType("global::System.Threading.Tasks.Task");
860
- const buildTaskRunInvocation = (outputTaskType, body, isAsync) => {
861
- const resultType = getTaskResultType(outputTaskType);
862
- return {
863
- kind: "invocationExpression",
864
- expression: {
129
+ {
865
130
  kind: "memberAccessExpression",
866
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
867
- memberName: "Run",
868
- },
869
- arguments: [
870
- {
871
- kind: "lambdaExpression",
872
- isAsync,
873
- parameters: [],
874
- body,
131
+ expression: {
132
+ kind: "typeReferenceExpression",
133
+ type: ownerTypeAst,
875
134
  },
876
- ],
877
- typeArguments: resultType ? [resultType] : undefined,
878
- };
879
- };
880
- const buildCompletedTaskAst = () => ({
881
- kind: "memberAccessExpression",
882
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
883
- memberName: "CompletedTask",
884
- });
885
- const buildPromiseRejectedExceptionAst = (reasonAst) => {
886
- const reasonExpr = reasonAst ?? nullLiteral();
887
- return {
888
- kind: "binaryExpression",
889
- operatorToken: "??",
890
- left: {
891
- kind: "asExpression",
892
- expression: reasonExpr,
893
- type: identifierType("global::System.Exception"),
894
- },
895
- right: {
896
- kind: "objectCreationExpression",
897
- type: identifierType("global::System.Exception"),
898
- arguments: [
899
- {
900
- kind: "binaryExpression",
901
- operatorToken: "??",
902
- left: {
903
- kind: "invocationExpression",
904
- expression: {
905
- kind: "conditionalMemberAccessExpression",
906
- expression: reasonExpr,
907
- memberName: "ToString",
908
- },
909
- arguments: [],
910
- },
911
- right: {
912
- ...stringLiteral("Promise rejected"),
913
- },
914
- },
915
- ],
135
+ memberName: binding.member,
916
136
  },
917
- };
918
- };
919
- const getPromiseStaticMethod = (expr) => {
920
- if (expr.callee.kind !== "memberAccess")
921
- return undefined;
922
- if (expr.callee.isComputed)
923
- return undefined;
924
- if (typeof expr.callee.property !== "string")
925
- return undefined;
926
- if (expr.callee.object.kind !== "identifier")
927
- return undefined;
928
- const objectName = expr.callee.object.originalName ?? expr.callee.object.name;
929
- const simpleObjectName = objectName.split(".").pop() ?? objectName;
930
- if (simpleObjectName !== "Promise")
931
- return undefined;
932
- switch (expr.callee.property) {
933
- case "resolve":
934
- case "reject":
935
- case "all":
936
- case "race":
937
- return expr.callee.property;
938
- default:
939
- return undefined;
940
- }
137
+ currentContext,
138
+ ];
941
139
  };
942
- const getSequenceElementIrType = (type) => {
943
- if (!type)
944
- return undefined;
945
- if (type.kind === "arrayType")
946
- return type.elementType;
947
- if (type.kind === "tupleType") {
948
- if (type.elementTypes.length === 0)
949
- return undefined;
950
- if (type.elementTypes.length === 1)
951
- return type.elementTypes[0];
952
- return { kind: "unionType", types: type.elementTypes };
140
+ const castInvokedLambdaTarget = (calleeExpr, calleeType, context) => {
141
+ if (calleeExpr.kind !== "lambdaExpression") {
142
+ return [calleeExpr, context];
953
143
  }
954
- if (type.kind === "referenceType" &&
955
- type.typeArguments &&
956
- type.typeArguments.length > 0) {
957
- const simpleName = type.name.split(".").pop() ?? type.name;
958
- switch (simpleName) {
959
- case "Array":
960
- case "ReadonlyArray":
961
- case "Iterable":
962
- case "IterableIterator":
963
- case "IEnumerable":
964
- case "IReadOnlyList":
965
- case "List":
966
- case "Set":
967
- case "ReadonlySet":
968
- case "JSArray":
969
- return type.typeArguments[0];
970
- default:
971
- return undefined;
972
- }
144
+ if (!calleeType || calleeType.kind !== "functionType") {
145
+ throw new Error("Internal Compiler Error: Immediately-invoked function expression reached call emission without a concrete function type.");
973
146
  }
974
- return undefined;
975
- };
976
- const isValueTaskLikeIrType = (type) => {
977
- if (!type || type.kind !== "referenceType")
978
- return false;
979
- const simpleName = type.name.split(".").pop() ?? type.name;
980
- const clrName = type.resolvedClrType ?? type.name;
981
- return (simpleName === "ValueTask" ||
982
- simpleName === "ValueTask_1" ||
983
- simpleName === "ValueTask`1" ||
984
- clrName === "System.Threading.Tasks.ValueTask" ||
985
- clrName.startsWith("System.Threading.Tasks.ValueTask`1"));
986
- };
987
- const emitPromiseNormalizedTaskAst = (valueAst, valueType, resultTypeAst, context) => {
988
147
  let currentContext = context;
989
- if (valueType && isAwaitableIrType(valueType)) {
990
- if (isValueTaskLikeIrType(valueType)) {
991
- return [
992
- {
993
- kind: "invocationExpression",
994
- expression: {
995
- kind: "memberAccessExpression",
996
- expression: valueAst,
997
- memberName: "AsTask",
998
- },
999
- arguments: [],
1000
- },
1001
- currentContext,
1002
- ];
148
+ const parameterTypeAsts = [];
149
+ for (const parameter of calleeType.parameters) {
150
+ if (!parameter?.type) {
151
+ throw new Error("Internal Compiler Error: Function-expression invocation parameter is missing a concrete type.");
1003
152
  }
1004
- return [valueAst, currentContext];
1005
- }
1006
- if (valueType?.kind === "unionType") {
1007
- const arms = [];
1008
- for (let index = 0; index < valueType.types.length; index++) {
1009
- const memberType = valueType.types[index];
1010
- if (!memberType)
1011
- continue;
1012
- const [memberTypeAst, memberTypeContext] = emitTypeAst(memberType, currentContext);
1013
- currentContext = memberTypeContext;
1014
- const memberName = `__tsonic_promise_value_${index}`;
1015
- const [normalizedArm, normalizedContext] = emitPromiseNormalizedTaskAst({
1016
- kind: "identifierExpression",
1017
- identifier: memberName,
1018
- }, memberType, resultTypeAst, currentContext);
1019
- currentContext = normalizedContext;
1020
- arms.push({
1021
- kind: "lambdaExpression",
1022
- isAsync: false,
1023
- parameters: [{ name: memberName, type: memberTypeAst }],
1024
- body: normalizedArm,
1025
- });
1026
- }
1027
- return [
1028
- {
1029
- kind: "invocationExpression",
1030
- expression: {
1031
- kind: "memberAccessExpression",
1032
- expression: valueAst,
1033
- memberName: "Match",
1034
- },
1035
- arguments: arms,
1036
- },
1037
- currentContext,
1038
- ];
1039
- }
1040
- if (!resultTypeAst) {
1041
- return [buildCompletedTaskAst(), currentContext];
153
+ const [parameterTypeAst, parameterTypeContext] = emitTypeAst(parameter.type, currentContext);
154
+ parameterTypeAsts.push(parameterTypeAst);
155
+ currentContext = parameterTypeContext;
1042
156
  }
157
+ const [returnTypeAst, returnTypeContext] = emitTypeAst(calleeType.returnType, currentContext);
1043
158
  return [
1044
159
  {
1045
- kind: "invocationExpression",
160
+ kind: "parenthesizedExpression",
1046
161
  expression: {
1047
- kind: "memberAccessExpression",
1048
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
1049
- memberName: "FromResult",
1050
- },
1051
- typeArguments: [resultTypeAst],
1052
- arguments: [valueAst],
1053
- },
1054
- currentContext,
1055
- ];
1056
- };
1057
- const emitPromiseStaticCall = (expr, context) => {
1058
- const method = getPromiseStaticMethod(expr);
1059
- if (!method)
1060
- return null;
1061
- let currentContext = context;
1062
- const [outputTaskType, outputTaskContext] = emitTypeAst(expr.inferredType ?? {
1063
- kind: "referenceType",
1064
- name: "Promise",
1065
- typeArguments: [{ kind: "referenceType", name: "object" }],
1066
- }, currentContext);
1067
- currentContext = outputTaskContext;
1068
- const outputResultType = getTaskResultType(outputTaskType);
1069
- if (method === "resolve") {
1070
- const argument = expr.arguments[0];
1071
- if (!argument) {
1072
- return [buildCompletedTaskAst(), currentContext];
1073
- }
1074
- const [valueAst, valueContext] = emitExpressionAst(argument, currentContext, argument.inferredType);
1075
- currentContext = valueContext;
1076
- return emitPromiseNormalizedTaskAst(valueAst, argument.inferredType, outputResultType, currentContext);
1077
- }
1078
- if (method === "reject") {
1079
- const reason = expr.arguments[0];
1080
- let reasonAst;
1081
- if (reason) {
1082
- [reasonAst, currentContext] = emitExpressionAst(reason, currentContext, reason.inferredType);
1083
- }
1084
- const exceptionAst = buildPromiseRejectedExceptionAst(reasonAst);
1085
- return [
1086
- {
1087
- kind: "invocationExpression",
1088
- expression: {
1089
- kind: "memberAccessExpression",
1090
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
1091
- memberName: "FromException",
1092
- },
1093
- typeArguments: outputResultType ? [outputResultType] : undefined,
1094
- arguments: [exceptionAst],
1095
- },
1096
- currentContext,
1097
- ];
1098
- }
1099
- const valuesArg = expr.arguments[0];
1100
- if (!valuesArg)
1101
- return null;
1102
- const [valuesAst, valuesContext] = emitExpressionAst(valuesArg, currentContext, valuesArg.inferredType);
1103
- currentContext = valuesContext;
1104
- const inputElementType = getSequenceElementIrType(valuesArg.inferredType);
1105
- const resultElementTypeAst = outputResultType?.kind === "arrayType"
1106
- ? outputResultType.elementType
1107
- : outputResultType;
1108
- let normalizedValuesAst = valuesAst;
1109
- if (inputElementType) {
1110
- const [inputElementTypeAst, inputElementContext] = emitTypeAst(inputElementType, currentContext);
1111
- currentContext = inputElementContext;
1112
- const [normalizedTaskAst, normalizedTaskContext] = emitPromiseNormalizedTaskAst({
1113
- kind: "identifierExpression",
1114
- identifier: "__tsonic_promise_item",
1115
- }, inputElementType, resultElementTypeAst, currentContext);
1116
- currentContext = normalizedTaskContext;
1117
- normalizedValuesAst = {
1118
- kind: "invocationExpression",
1119
- expression: identifierExpression("global::System.Linq.Enumerable.Select"),
1120
- arguments: [
1121
- valuesAst,
1122
- {
1123
- kind: "lambdaExpression",
1124
- isAsync: false,
1125
- parameters: [
1126
- {
1127
- name: "__tsonic_promise_item",
1128
- type: inputElementTypeAst,
1129
- },
1130
- ],
1131
- body: normalizedTaskAst,
1132
- },
1133
- ],
1134
- };
1135
- }
1136
- if (method === "all") {
1137
- return [
1138
- {
1139
- kind: "invocationExpression",
162
+ kind: "castExpression",
163
+ type: buildDelegateType(parameterTypeAsts, returnTypeAst),
1140
164
  expression: {
1141
- kind: "memberAccessExpression",
1142
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
1143
- memberName: "WhenAll",
165
+ kind: "parenthesizedExpression",
166
+ expression: calleeExpr,
1144
167
  },
1145
- arguments: [normalizedValuesAst],
1146
168
  },
1147
- currentContext,
1148
- ];
1149
- }
1150
- const whenAnyAst = {
1151
- kind: "invocationExpression",
1152
- expression: {
1153
- kind: "memberAccessExpression",
1154
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
1155
- memberName: "WhenAny",
1156
169
  },
1157
- arguments: [normalizedValuesAst],
1158
- };
1159
- if (!outputResultType) {
1160
- return [
1161
- buildTaskRunInvocation(outputTaskType, {
1162
- kind: "blockStatement",
1163
- statements: [
1164
- {
1165
- kind: "expressionStatement",
1166
- expression: {
1167
- kind: "awaitExpression",
1168
- expression: {
1169
- kind: "awaitExpression",
1170
- expression: whenAnyAst,
1171
- },
1172
- },
1173
- },
1174
- ],
1175
- }, true),
1176
- currentContext,
1177
- ];
1178
- }
1179
- return [
1180
- buildTaskRunInvocation(outputTaskType, {
1181
- kind: "blockStatement",
1182
- statements: [
1183
- {
1184
- kind: "returnStatement",
1185
- expression: {
1186
- kind: "awaitExpression",
1187
- expression: {
1188
- kind: "awaitExpression",
1189
- expression: whenAnyAst,
1190
- },
1191
- },
1192
- },
1193
- ],
1194
- }, true),
1195
- currentContext,
170
+ returnTypeContext,
1196
171
  ];
1197
172
  };
1198
- const getDynamicImportSpecifier = (expr) => {
1199
- const [arg] = expr.arguments;
1200
- if (!arg || arg.kind === "spread")
1201
- return undefined;
1202
- return arg.kind === "literal" && typeof arg.value === "string"
1203
- ? arg.value
1204
- : undefined;
1205
- };
1206
- const resolveDynamicImportTargetModule = (specifier, context) => {
1207
- const currentFilePath = context.options.currentModuleFilePath;
1208
- const moduleMap = context.options.moduleMap;
1209
- if (!currentFilePath || !moduleMap) {
173
+ const emitSyntheticArraySliceCall = (expr, context) => {
174
+ if (expr.callee.kind !== "memberAccess") {
1210
175
  return undefined;
1211
176
  }
1212
- const targetPath = resolveImportPath(currentFilePath, specifier);
1213
- const direct = moduleMap.get(targetPath);
1214
- if (direct) {
1215
- return direct;
1216
- }
1217
- const normalizedTarget = targetPath.replace(/\\/g, "/");
1218
- for (const [key, identity] of moduleMap.entries()) {
1219
- const normalizedKey = key.replace(/\\/g, "/");
1220
- if (normalizedKey === normalizedTarget ||
1221
- normalizedKey.endsWith(`/${normalizedTarget}`) ||
1222
- normalizedTarget.endsWith(`/${normalizedKey}`)) {
1223
- return identity;
1224
- }
1225
- }
1226
- return undefined;
1227
- };
1228
- const buildDynamicImportContainerType = (targetModule) => {
1229
- const containerName = targetModule.hasTypeCollision
1230
- ? `${targetModule.className}__Module`
1231
- : targetModule.className;
1232
- return identifierType(`global::${targetModule.namespace}.${containerName}`);
1233
- };
1234
- const buildRunClassConstructorExpression = (containerType) => ({
1235
- kind: "invocationExpression",
1236
- expression: {
1237
- kind: "memberAccessExpression",
1238
- expression: {
1239
- ...identifierExpression("global::System.Runtime.CompilerServices.RuntimeHelpers"),
1240
- },
1241
- memberName: "RunClassConstructor",
1242
- },
1243
- arguments: [
1244
- {
1245
- kind: "memberAccessExpression",
1246
- expression: {
1247
- kind: "typeofExpression",
1248
- type: containerType,
1249
- },
1250
- memberName: "TypeHandle",
1251
- },
1252
- ],
1253
- });
1254
- const emitDynamicImportCall = (expr, context) => {
1255
- if (expr.callee.kind !== "identifier" || expr.callee.name !== "import") {
1256
- return null;
1257
- }
1258
- const specifier = getDynamicImportSpecifier(expr);
1259
- if (!specifier)
1260
- return null;
1261
- const completedTaskExpr = {
1262
- kind: "memberAccessExpression",
1263
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
1264
- memberName: "CompletedTask",
1265
- };
1266
- const targetModule = resolveDynamicImportTargetModule(specifier, context);
1267
- if (!expr.dynamicImportNamespace) {
1268
- if (!targetModule || !targetModule.hasRuntimeContainer) {
1269
- return [completedTaskExpr, context];
1270
- }
1271
- const containerType = buildDynamicImportContainerType(targetModule);
1272
- const runClassConstructor = buildRunClassConstructorExpression(containerType);
1273
- return [
1274
- {
1275
- kind: "invocationExpression",
1276
- expression: {
1277
- kind: "memberAccessExpression",
1278
- expression: identifierExpression("global::System.Threading.Tasks.Task"),
1279
- memberName: "Run",
1280
- },
1281
- arguments: [
1282
- {
1283
- kind: "lambdaExpression",
1284
- isAsync: false,
1285
- parameters: [],
1286
- body: runClassConstructor,
1287
- },
1288
- ],
1289
- },
1290
- context,
1291
- ];
1292
- }
1293
- if (!targetModule) {
1294
- throw new Error(`ICE: Closed-world dynamic import '${specifier}' was validated as a namespace import but no module identity was available during emission.`);
1295
- }
1296
- let currentContext = context;
1297
- const [outputTaskType, outputTaskContext] = emitTypeAst(expr.inferredType ?? {
1298
- kind: "referenceType",
1299
- name: "Promise",
1300
- typeArguments: [{ kind: "referenceType", name: "object" }],
1301
- }, currentContext);
1302
- currentContext = outputTaskContext;
1303
- const [namespaceAst, namespaceContext] = expr.dynamicImportNamespace.properties.length === 0
1304
- ? [
1305
- {
1306
- kind: "objectCreationExpression",
1307
- type: { kind: "predefinedType", keyword: "object" },
1308
- arguments: [],
1309
- },
1310
- currentContext,
1311
- ]
1312
- : emitExpressionAst(expr.dynamicImportNamespace, currentContext, expr.dynamicImportNamespace.inferredType);
1313
- currentContext = namespaceContext;
1314
- const setupStatements = [];
1315
- if (targetModule.hasRuntimeContainer) {
1316
- const containerType = buildDynamicImportContainerType(targetModule);
1317
- setupStatements.push({
1318
- kind: "expressionStatement",
1319
- expression: buildRunClassConstructorExpression(containerType),
1320
- });
1321
- }
1322
- return [
1323
- buildTaskRunInvocation(outputTaskType, {
1324
- kind: "blockStatement",
1325
- statements: [
1326
- ...setupStatements,
1327
- {
1328
- kind: "returnStatement",
1329
- expression: namespaceAst,
1330
- },
1331
- ],
1332
- }, false),
1333
- currentContext,
1334
- ];
1335
- };
1336
- const emitPromiseThenCatchFinally = (expr, context) => {
1337
- if (expr.callee.kind !== "memberAccess")
1338
- return null;
1339
- if (typeof expr.callee.property !== "string")
1340
- return null;
1341
- if (!isPromiseChainMethod(expr.callee.property))
1342
- return null;
1343
- if (expr.callee.isOptional || expr.isOptional)
1344
- return null;
1345
- if (!isAsyncWrapperType(expr.callee.object.inferredType))
1346
- return null;
1347
- let currentContext = context;
1348
- const [receiverAst, receiverCtx] = emitExpressionAst(expr.callee.object, currentContext);
1349
- currentContext = receiverCtx;
1350
- const outputTypeHint = context.returnType && isAsyncWrapperType(context.returnType)
1351
- ? context.returnType
1352
- : expr.inferredType;
1353
- const [rawOutputTaskType, outputTaskCtx] = emitTypeAst(outputTypeHint ?? { kind: "referenceType", name: "Task" }, currentContext);
1354
- currentContext = outputTaskCtx;
1355
- const rawOutputTaskResultType = getTaskResultType(rawOutputTaskType);
1356
- const defaultOutputTaskType = rawOutputTaskResultType && containsVoidTypeAst(rawOutputTaskResultType)
1357
- ? identifierType("global::System.Threading.Tasks.Task")
1358
- : rawOutputTaskType;
1359
- const [sourceTaskType, sourceTaskCtx] = emitTypeAst(expr.callee.object.inferredType ?? { kind: "referenceType", name: "Task" }, currentContext);
1360
- currentContext = sourceTaskCtx;
1361
- const sourceResultType = getTaskResultType(sourceTaskType);
1362
- const sourceResultIr = normalizePromiseChainResultIrType(expr.callee.object.inferredType);
1363
- const exIdent = "__tsonic_promise_ex";
1364
- const valueIdent = "__tsonic_promise_value";
1365
- const fulfilledArg = expr.arguments[0];
1366
- const rejectedArg = expr.callee.property === "then" ? expr.arguments[1] : expr.arguments[0];
1367
- const finallyArg = expr.callee.property === "finally" ? expr.arguments[0] : undefined;
1368
- let fulfilledAst;
1369
- let rejectedAst;
1370
- let finallyAst;
1371
- if (fulfilledArg && fulfilledArg.kind !== "spread") {
1372
- const [fAst, fCtx] = emitExpressionAst(fulfilledArg, currentContext);
1373
- fulfilledAst = fAst;
1374
- currentContext = fCtx;
1375
- }
1376
- if (rejectedArg && rejectedArg.kind !== "spread") {
1377
- const [rAst, rCtx] = emitExpressionAst(rejectedArg, currentContext);
1378
- rejectedAst = rAst;
1379
- currentContext = rCtx;
1380
- }
1381
- if (finallyArg && finallyArg.kind !== "spread") {
1382
- const [fiAst, fiCtx] = emitExpressionAst(finallyArg, currentContext);
1383
- finallyAst = fiAst;
1384
- currentContext = fiCtx;
1385
- }
1386
- const fulfilledResultIr = fulfilledArg && fulfilledArg.kind !== "spread"
1387
- ? normalizePromiseChainResultIrType(getCallbackReturnType(fulfilledArg))
1388
- : undefined;
1389
- const rejectedResultIr = rejectedArg && rejectedArg.kind !== "spread"
1390
- ? normalizePromiseChainResultIrType(getCallbackReturnType(rejectedArg))
1391
- : undefined;
1392
- const normalizedPromiseChainResultIr = (() => {
1393
- if (expr.callee.property === "then") {
1394
- if (rejectedArg && rejectedArg.kind !== "spread") {
1395
- return mergePromiseChainResultIrTypes(fulfilledResultIr ?? sourceResultIr, rejectedResultIr);
1396
- }
1397
- return fulfilledResultIr ?? sourceResultIr;
1398
- }
1399
- if (expr.callee.property === "catch") {
1400
- return mergePromiseChainResultIrTypes(sourceResultIr, rejectedResultIr);
1401
- }
1402
- if (expr.callee.property === "finally") {
1403
- return sourceResultIr;
1404
- }
177
+ const binding = expr.callee.memberBinding;
178
+ if (binding?.assembly !== "__synthetic" ||
179
+ binding.type !== "Array" ||
180
+ binding.member !== "slice" ||
181
+ expr.arguments.length !== 1) {
1405
182
  return undefined;
1406
- })();
1407
- const normalizedFrontendPromiseChainResultIr = normalizePromiseChainResultIrType(expr.inferredType);
1408
- const preferredPromiseChainResultIr = normalizedFrontendPromiseChainResultIr &&
1409
- !containsPromiseChainArtifact(normalizedFrontendPromiseChainResultIr)
1410
- ? normalizedFrontendPromiseChainResultIr
1411
- : normalizedPromiseChainResultIr;
1412
- let outputResultType = getTaskResultType(defaultOutputTaskType);
1413
- let outputTaskType = defaultOutputTaskType;
1414
- if (preferredPromiseChainResultIr) {
1415
- const [normalizedResultAst, normalizedCtx] = emitTypeAst(preferredPromiseChainResultIr, currentContext);
1416
- currentContext = normalizedCtx;
1417
- outputResultType = containsVoidTypeAst(normalizedResultAst)
1418
- ? undefined
1419
- : normalizedResultAst;
1420
- outputTaskType = buildTaskTypeAst(outputResultType);
1421
- }
1422
- const awaitReceiverStatement = sourceResultType === undefined
1423
- ? {
1424
- kind: "expressionStatement",
1425
- expression: buildAwait(receiverAst),
1426
- }
1427
- : {
1428
- kind: "localDeclarationStatement",
1429
- modifiers: [],
1430
- type: { kind: "varType" },
1431
- declarators: [
1432
- {
1433
- name: valueIdent,
1434
- initializer: buildAwait(receiverAst),
1435
- },
1436
- ],
1437
- };
1438
- const invokeFulfilled = () => {
1439
- if (!fulfilledAst) {
1440
- if (sourceResultType === undefined)
1441
- return [];
1442
- return [
1443
- {
1444
- kind: "returnStatement",
1445
- expression: {
1446
- kind: "identifierExpression",
1447
- identifier: valueIdent,
1448
- },
1449
- },
1450
- ];
1451
- }
1452
- const fulfilledArgs = [];
1453
- if (sourceResultType !== undefined &&
1454
- callbackParameterCount(fulfilledArg) > 0) {
1455
- fulfilledArgs.push({
1456
- kind: "identifierExpression",
1457
- identifier: valueIdent,
1458
- });
1459
- }
1460
- const delegateParamTypes = sourceResultType !== undefined &&
1461
- callbackParameterCount(fulfilledArg) > 0
1462
- ? [sourceResultType]
1463
- : [];
1464
- const callbackReturnIr = getCallbackDelegateReturnType(fulfilledArg);
1465
- let callbackReturnTypeAst = outputResultType;
1466
- if (callbackReturnIr !== undefined) {
1467
- const [cbRetAst, cbRetCtx] = emitTypeAst(callbackReturnIr, currentContext);
1468
- callbackReturnTypeAst =
1469
- (cbRetAst.kind === "predefinedType" && cbRetAst.keyword === "void") ||
1470
- (cbRetAst.kind === "identifierType" && cbRetAst.name === "void")
1471
- ? undefined
1472
- : cbRetAst;
1473
- currentContext = cbRetCtx;
1474
- }
1475
- if (outputResultType !== undefined && callbackReturnTypeAst === undefined) {
1476
- callbackReturnTypeAst = outputResultType;
1477
- }
1478
- if (callbackReturnTypeAst === undefined &&
1479
- fulfilledArg?.kind === "arrowFunction" &&
1480
- fulfilledArg.body.kind !== "blockStatement") {
1481
- callbackReturnTypeAst = { kind: "predefinedType", keyword: "object" };
1482
- }
1483
- const callbackCallee = fulfilledAst.kind === "lambdaExpression"
1484
- ? {
1485
- kind: "castExpression",
1486
- type: buildDelegateType(delegateParamTypes, callbackReturnTypeAst),
1487
- expression: fulfilledAst,
1488
- }
1489
- : fulfilledAst;
1490
- const callbackCall = callbackCallee.kind === "castExpression"
1491
- ? buildInvocation({
1492
- kind: "memberAccessExpression",
1493
- expression: callbackCallee,
1494
- memberName: "Invoke",
1495
- }, fulfilledArgs)
1496
- : buildInvocation(callbackCallee, fulfilledArgs);
1497
- const callbackExpr = callbackReturnsAsyncWrapper(fulfilledArg)
1498
- ? buildAwait(callbackCall)
1499
- : callbackCall;
1500
- if (outputResultType === undefined) {
1501
- return [{ kind: "expressionStatement", expression: callbackExpr }];
1502
- }
1503
- return [{ kind: "returnStatement", expression: callbackExpr }];
1504
- };
1505
- const invokeRejected = () => {
1506
- if (!rejectedAst) {
1507
- return [{ kind: "throwStatement" }];
1508
- }
1509
- const rejectedArgs = [];
1510
- if (callbackParameterCount(rejectedArg) > 0) {
1511
- rejectedArgs.push({
1512
- kind: "identifierExpression",
1513
- identifier: exIdent,
1514
- });
1515
- }
1516
- const callbackReturnIr = getCallbackDelegateReturnType(rejectedArg);
1517
- let callbackReturnTypeAst = outputResultType;
1518
- if (callbackReturnIr !== undefined) {
1519
- const [cbRetAst, cbRetCtx] = emitTypeAst(callbackReturnIr, currentContext);
1520
- callbackReturnTypeAst =
1521
- (cbRetAst.kind === "predefinedType" && cbRetAst.keyword === "void") ||
1522
- (cbRetAst.kind === "identifierType" && cbRetAst.name === "void")
1523
- ? undefined
1524
- : cbRetAst;
1525
- currentContext = cbRetCtx;
1526
- }
1527
- if (outputResultType !== undefined && callbackReturnTypeAst === undefined) {
1528
- callbackReturnTypeAst = outputResultType;
1529
- }
1530
- if (callbackReturnTypeAst === undefined &&
1531
- rejectedArg?.kind === "arrowFunction" &&
1532
- rejectedArg.body.kind !== "blockStatement") {
1533
- callbackReturnTypeAst = { kind: "predefinedType", keyword: "object" };
1534
- }
1535
- const callbackCallee = rejectedAst.kind === "lambdaExpression"
1536
- ? {
1537
- kind: "castExpression",
1538
- type: buildDelegateType([identifierType("global::System.Exception")], callbackReturnTypeAst),
1539
- expression: rejectedAst,
1540
- }
1541
- : rejectedAst;
1542
- const callbackCall = callbackCallee.kind === "castExpression"
1543
- ? buildInvocation({
1544
- kind: "memberAccessExpression",
1545
- expression: callbackCallee,
1546
- memberName: "Invoke",
1547
- }, rejectedArgs)
1548
- : buildInvocation(callbackCallee, rejectedArgs);
1549
- const callbackExpr = callbackReturnsAsyncWrapper(rejectedArg)
1550
- ? buildAwait(callbackCall)
1551
- : callbackCall;
1552
- if (outputResultType === undefined) {
1553
- return [{ kind: "expressionStatement", expression: callbackExpr }];
1554
- }
1555
- return [{ kind: "returnStatement", expression: callbackExpr }];
1556
- };
1557
- const invokeFinally = () => {
1558
- if (!finallyAst)
1559
- return [];
1560
- const callbackReturnIr = getCallbackDelegateReturnType(finallyArg);
1561
- let callbackReturnTypeAst = undefined;
1562
- if (callbackReturnIr !== undefined) {
1563
- const [cbRetAst, cbRetCtx] = emitTypeAst(callbackReturnIr, currentContext);
1564
- callbackReturnTypeAst = cbRetAst;
1565
- currentContext = cbRetCtx;
1566
- }
1567
- if (callbackReturnTypeAst === undefined &&
1568
- finallyArg?.kind === "arrowFunction" &&
1569
- finallyArg.body.kind !== "blockStatement") {
1570
- callbackReturnTypeAst = { kind: "predefinedType", keyword: "object" };
1571
- }
1572
- const callbackCallee = finallyAst.kind === "lambdaExpression"
1573
- ? {
1574
- kind: "castExpression",
1575
- type: buildDelegateType([], callbackReturnTypeAst),
1576
- expression: finallyAst,
1577
- }
1578
- : finallyAst;
1579
- const callbackCall = callbackCallee.kind === "castExpression"
1580
- ? buildInvocation({
1581
- kind: "memberAccessExpression",
1582
- expression: callbackCallee,
1583
- memberName: "Invoke",
1584
- }, [])
1585
- : buildInvocation(callbackCallee, []);
1586
- const callbackExpr = callbackReturnsAsyncWrapper(finallyArg)
1587
- ? buildAwait(callbackCall)
1588
- : callbackCall;
1589
- return [{ kind: "expressionStatement", expression: callbackExpr }];
1590
- };
1591
- if (expr.callee.property === "then") {
1592
- const thenStatements = [
1593
- awaitReceiverStatement,
1594
- ...invokeFulfilled(),
1595
- ];
1596
- const bodyStatements = rejectedAst
1597
- ? [
1598
- {
1599
- kind: "tryStatement",
1600
- body: { kind: "blockStatement", statements: thenStatements },
1601
- catches: [
1602
- {
1603
- type: identifierType("global::System.Exception"),
1604
- identifier: exIdent,
1605
- body: {
1606
- kind: "blockStatement",
1607
- statements: invokeRejected(),
1608
- },
1609
- },
1610
- ],
1611
- },
1612
- ]
1613
- : thenStatements;
1614
- return [
1615
- buildTaskRunInvocation(outputTaskType, {
1616
- kind: "blockStatement",
1617
- statements: bodyStatements,
1618
- }, true),
1619
- currentContext,
1620
- ];
1621
183
  }
1622
- if (expr.callee.property === "catch") {
1623
- const successPath = sourceResultType === undefined
1624
- ? [{ kind: "expressionStatement", expression: buildAwait(receiverAst) }]
1625
- : [
1626
- {
1627
- kind: "returnStatement",
1628
- expression: buildAwait(receiverAst),
1629
- },
1630
- ];
1631
- const catches = [
1632
- {
1633
- type: identifierType("global::System.Exception"),
1634
- identifier: exIdent,
1635
- body: {
1636
- kind: "blockStatement",
1637
- statements: invokeRejected(),
1638
- },
1639
- },
1640
- ];
1641
- return [
1642
- buildTaskRunInvocation(outputTaskType, {
1643
- kind: "blockStatement",
1644
- statements: [
1645
- {
1646
- kind: "tryStatement",
1647
- body: { kind: "blockStatement", statements: successPath },
1648
- catches,
1649
- },
1650
- ],
1651
- }, true),
1652
- currentContext,
1653
- ];
1654
- }
1655
- if (expr.callee.property === "finally") {
1656
- const tryStatements = sourceResultType === undefined
1657
- ? [{ kind: "expressionStatement", expression: buildAwait(receiverAst) }]
1658
- : [{ kind: "returnStatement", expression: buildAwait(receiverAst) }];
1659
- return [
1660
- buildTaskRunInvocation(outputTaskType, {
1661
- kind: "blockStatement",
1662
- statements: [
1663
- {
1664
- kind: "tryStatement",
1665
- body: { kind: "blockStatement", statements: tryStatements },
1666
- catches: [],
1667
- finallyBody: {
1668
- kind: "blockStatement",
1669
- statements: invokeFinally(),
1670
- },
1671
- },
1672
- ],
1673
- }, true),
1674
- currentContext,
1675
- ];
1676
- }
1677
- return null;
1678
- };
1679
- /**
1680
- * Emit call arguments as typed AST array.
1681
- * Handles spread arrays, castModifier (ref/out from cast), and argumentPassing modes.
1682
- */
1683
- const emitCallArguments = (args, expr, context) => {
1684
- const functionValueSignature = getFunctionValueSignature(expr);
1685
- if (functionValueSignature &&
1686
- functionValueSignature.parameters.some((parameter) => parameter?.isRest ||
1687
- parameter?.isOptional ||
1688
- parameter?.initializer !== undefined)) {
1689
- return emitFunctionValueCallArguments(args, functionValueSignature, expr, context);
1690
- }
1691
- const parameterTypes = expr.parameterTypes ?? [];
1692
- const restInfo = detectRestParameterInfo(args, parameterTypes);
1693
- let currentContext = context;
1694
- const argAsts = [];
1695
- for (let i = 0; i < args.length; i++) {
1696
- const arg = args[i];
1697
- if (!arg)
1698
- continue;
1699
- if (restInfo &&
1700
- i === restInfo.index &&
1701
- args
1702
- .slice(restInfo.index)
1703
- .some((candidate) => candidate?.kind === "spread")) {
1704
- const [flattenedRestArgs, flattenedContext] = emitFlattenedRestArguments(args.slice(restInfo.index), restInfo.elementType, currentContext);
1705
- argAsts.push(...flattenedRestArgs);
1706
- currentContext = flattenedContext;
1707
- break;
1708
- }
1709
- const expectedType = restInfo && i >= restInfo.index
1710
- ? restInfo.elementType
1711
- : parameterTypes[i];
1712
- if (arg.kind === "spread") {
1713
- const [spreadAst, ctx] = emitExpressionAst(arg.expression, currentContext);
1714
- argAsts.push(spreadAst);
1715
- currentContext = ctx;
1716
- }
1717
- else {
1718
- const castModifier = getPassingModifierFromCast(arg);
1719
- if (castModifier && isLValue(arg)) {
1720
- const [argAst, ctx] = emitExpressionAst(arg, currentContext);
1721
- argAsts.push(wrapArgModifier(castModifier, argAst));
1722
- currentContext = ctx;
1723
- }
1724
- else {
1725
- const [argAst, ctx] = emitExpressionAst(arg, currentContext, expectedType);
1726
- const passingMode = expr.argumentPassing?.[i];
1727
- const modifier = passingMode && passingMode !== "value" && isLValue(arg)
1728
- ? passingMode
1729
- : undefined;
1730
- argAsts.push(wrapArgModifier(modifier, argAst));
1731
- currentContext = ctx;
1732
- }
1733
- }
1734
- }
1735
- return [argAsts, currentContext];
1736
- };
1737
- /**
1738
- * Emit a JsonSerializer call with NativeAOT-compatible options.
1739
- */
1740
- const isConcreteGlobalJsonParseTarget = (type) => {
1741
- if (!type)
1742
- return false;
1743
- if (type.kind === "unknownType" ||
1744
- type.kind === "anyType" ||
1745
- type.kind === "voidType" ||
1746
- type.kind === "neverType") {
1747
- return false;
1748
- }
1749
- if (type.kind === "unionType" || type.kind === "intersectionType") {
1750
- return false;
1751
- }
1752
- return !containsTypeParameter(type);
1753
- };
1754
- const emitJsRuntimeJsonParseCall = (expr, context, typeArgument) => {
1755
- let currentContext = context;
1756
- const argAsts = [];
1757
- for (const arg of expr.arguments) {
1758
- if (arg.kind === "spread") {
1759
- const [spreadAst, ctx] = emitExpressionAst(arg.expression, currentContext);
1760
- argAsts.push(spreadAst);
1761
- currentContext = ctx;
1762
- continue;
1763
- }
1764
- const [argAst, ctx] = emitExpressionAst(arg, currentContext);
1765
- argAsts.push(argAst);
1766
- currentContext = ctx;
184
+ const startIndex = expr.arguments[0];
185
+ if (!startIndex || startIndex.kind === "spread") {
186
+ return undefined;
1767
187
  }
188
+ const [receiverAst, receiverContext] = emitExpressionAst(expr.callee.object, context);
189
+ const [startAst, startContext] = emitExpressionAst(startIndex, receiverContext, { kind: "primitiveType", name: "int" });
1768
190
  return [
1769
191
  {
1770
192
  kind: "invocationExpression",
1771
- expression: {
1772
- kind: "memberAccessExpression",
1773
- expression: identifierExpression("global::Tsonic.JSRuntime.JSON"),
1774
- memberName: "parse",
1775
- },
1776
- arguments: argAsts,
1777
- typeArguments: [typeArgument],
193
+ expression: identifierExpression("global::System.Linq.Enumerable.ToArray"),
194
+ arguments: [
195
+ {
196
+ kind: "invocationExpression",
197
+ expression: identifierExpression("global::System.Linq.Enumerable.Skip"),
198
+ arguments: [receiverAst, startAst],
199
+ },
200
+ ],
1778
201
  },
1779
- currentContext,
202
+ startContext,
1780
203
  ];
1781
204
  };
1782
- const emitJsonSerializerCall = (expr, context, method, deserializeTypeOverride) => {
1783
- let currentContext = context;
1784
- // Register the type with the JSON AOT registry
1785
- if (method === "Serialize") {
1786
- const firstArg = expr.arguments[0];
1787
- if (firstArg && firstArg.kind !== "spread") {
1788
- registerJsonAotExpressionTypes(firstArg, context);
1789
- }
1790
- }
1791
- else {
1792
- const typeArg = deserializeTypeOverride ?? expr.typeArguments?.[0];
1793
- if (typeArg) {
1794
- registerJsonAotType(typeArg, context);
1795
- }
1796
- }
1797
- // Emit type arguments for Deserialize<T>
1798
- let typeArgAsts = [];
1799
- const deserializeIrType = method === "Deserialize"
1800
- ? (deserializeTypeOverride ?? expr.typeArguments?.[0])
1801
- : undefined;
1802
- if (deserializeIrType) {
1803
- const [typeArgs, typeContext] = emitTypeArgumentsAst([deserializeIrType], currentContext);
1804
- typeArgAsts = typeArgs;
1805
- currentContext = typeContext;
1806
- }
1807
- else if (expr.typeArguments && expr.typeArguments.length > 0) {
1808
- const [typeArgs, typeContext] = emitTypeArgumentsAst(expr.typeArguments, currentContext);
1809
- typeArgAsts = typeArgs;
1810
- currentContext = typeContext;
1811
- }
1812
- // Emit arguments
1813
- const argAsts = [];
1814
- for (const arg of expr.arguments) {
1815
- if (arg.kind === "spread") {
1816
- const [spreadAst, ctx] = emitExpressionAst(arg.expression, currentContext);
1817
- argAsts.push(spreadAst);
1818
- currentContext = ctx;
1819
- }
1820
- else {
1821
- const [argAst, ctx] = emitExpressionAst(arg, currentContext);
1822
- argAsts.push(argAst);
1823
- currentContext = ctx;
1824
- }
1825
- }
1826
- // Only pass TsonicJson.Options when this call site actually participates in the
1827
- // NativeAOT JSON rewrite. Non-generic JSON.parse(...) intentionally returns
1828
- // unknown and should emit plain JsonSerializer calls without requiring the
1829
- // generated TsonicJson helper.
1830
- if (context.options.jsonAotRegistry?.needsJsonAot) {
1831
- argAsts.push(identifierExpression("TsonicJson.Options"));
1832
- }
1833
- const invocation = {
1834
- kind: "invocationExpression",
1835
- expression: {
1836
- kind: "memberAccessExpression",
1837
- expression: identifierExpression("global::System.Text.Json.JsonSerializer"),
1838
- memberName: method,
1839
- },
1840
- arguments: argAsts,
1841
- typeArguments: typeArgAsts.length > 0 ? typeArgAsts : undefined,
1842
- };
1843
- return [invocation, currentContext];
1844
- };
1845
- const emitGlobalJsonCall = (expr, context, method) => {
1846
- if (method === "Serialize") {
1847
- return emitJsonSerializerCall(expr, context, method);
1848
- }
1849
- const deserializeTarget = expr.typeArguments?.[0] ??
1850
- (isConcreteGlobalJsonParseTarget(expr.inferredType)
1851
- ? expr.inferredType
1852
- : undefined);
1853
- if (deserializeTarget) {
1854
- return emitJsonSerializerCall(expr, context, "Deserialize", deserializeTarget);
1855
- }
1856
- return emitJsRuntimeJsonParseCall(expr, context, {
1857
- kind: "predefinedType",
1858
- keyword: "object",
1859
- });
1860
- };
1861
205
  /**
1862
206
  * Emit a function call expression as CSharpExpressionAst
1863
207
  */
1864
- export const emitCall = (expr, context) => {
1865
- const dynamicImport = emitDynamicImportCall(expr, context);
208
+ export const emitCall = (expr, context, expectedType) => {
209
+ const normalizedExpr = normalizePromiseResolveCall(expr, context);
210
+ const syntheticArraySlice = emitSyntheticArraySliceCall(normalizedExpr, context);
211
+ if (syntheticArraySlice) {
212
+ return syntheticArraySlice;
213
+ }
214
+ const dynamicImport = emitDynamicImportCall(normalizedExpr, context);
1866
215
  if (dynamicImport)
1867
216
  return dynamicImport;
1868
- const promiseStaticCall = emitPromiseStaticCall(expr, context);
217
+ const promiseStaticCall = emitPromiseStaticCall(normalizedExpr, context, expectedType);
1869
218
  if (promiseStaticCall)
1870
219
  return promiseStaticCall;
1871
- const promiseChain = emitPromiseThenCatchFinally(expr, context);
220
+ const promiseChain = emitPromiseThenCatchFinally(normalizedExpr, context);
1872
221
  if (promiseChain)
1873
222
  return promiseChain;
223
+ const runtimeUnionArrayIsArray = emitRuntimeUnionArrayIsArrayCall(normalizedExpr, context);
224
+ if (runtimeUnionArrayIsArray) {
225
+ return runtimeUnionArrayIsArray;
226
+ }
1874
227
  // Void promise resolve: emit as zero-arg call when safe.
1875
- if (expr.callee.kind === "identifier" &&
1876
- context.voidResolveNames?.has(expr.callee.name)) {
1877
- const isZeroArg = expr.arguments.length === 0;
1878
- const isSingleUndefined = expr.arguments.length === 1 &&
1879
- expr.arguments[0]?.kind === "identifier" &&
1880
- expr.arguments[0].name === "undefined";
228
+ const transparentCalleeIdentifier = extractTransparentIdentifier(normalizedExpr.callee);
229
+ if (transparentCalleeIdentifier &&
230
+ context.voidResolveNames?.has(transparentCalleeIdentifier.name)) {
231
+ const isZeroArg = normalizedExpr.arguments.length === 0;
232
+ const isSingleUndefined = normalizedExpr.arguments.length === 1 &&
233
+ normalizedExpr.arguments[0]?.kind === "identifier" &&
234
+ normalizedExpr.arguments[0].name === "undefined";
1881
235
  if (isZeroArg || isSingleUndefined) {
1882
- const [calleeAst, calleeCtx] = emitExpressionAst(expr.callee, context);
236
+ const [calleeAst, calleeCtx] = emitExpressionAst(transparentCalleeIdentifier, context);
1883
237
  return [
1884
238
  {
1885
239
  kind: "invocationExpression",
@@ -1891,21 +245,24 @@ export const emitCall = (expr, context) => {
1891
245
  }
1892
246
  }
1893
247
  // Check for JsonSerializer calls (NativeAOT support)
1894
- const jsonCall = isJsonSerializerCall(expr.callee);
248
+ const jsonCall = isJsonSerializerCall(normalizedExpr.callee);
1895
249
  if (jsonCall) {
1896
- return emitJsonSerializerCall(expr, context, jsonCall.method);
250
+ return emitJsonSerializerCall(normalizedExpr, context, jsonCall.method);
251
+ }
252
+ if (normalizedExpr.intrinsicKind === "globalSymbol") {
253
+ return emitGlobalSymbolCall(normalizedExpr, context);
1897
254
  }
1898
255
  // Check for global JSON.stringify/parse calls
1899
- const globalJsonCall = isGlobalJsonCall(expr.callee);
256
+ const globalJsonCall = isGlobalJsonCall(normalizedExpr.callee, context);
1900
257
  if (globalJsonCall) {
1901
- return emitGlobalJsonCall(expr, context, globalJsonCall.method);
1902
- }
1903
- // EF Core query canonicalization: ToList().ToArray() ToArray()
1904
- if (expr.callee.kind === "memberAccess" &&
1905
- expr.callee.property === "ToArray" &&
1906
- expr.arguments.length === 0 &&
1907
- expr.callee.object.kind === "call") {
1908
- const innerCall = expr.callee.object;
258
+ return emitGlobalJsonCall(normalizedExpr, context, globalJsonCall.method, expectedType);
259
+ }
260
+ // EF Core query canonicalization: ToList().ToArray() -> ToArray()
261
+ if (normalizedExpr.callee.kind === "memberAccess" &&
262
+ normalizedExpr.callee.property === "ToArray" &&
263
+ normalizedExpr.arguments.length === 0 &&
264
+ normalizedExpr.callee.object.kind === "call") {
265
+ const innerCall = normalizedExpr.callee.object;
1909
266
  if (innerCall.callee.kind === "memberAccess" &&
1910
267
  innerCall.callee.memberBinding?.isExtensionMethod &&
1911
268
  isInstanceMemberAccess(innerCall.callee, context) &&
@@ -1931,110 +288,48 @@ export const emitCall = (expr, context) => {
1931
288
  ];
1932
289
  }
1933
290
  }
1934
- // Extension method lowering: emit explicit static invocation with receiver as first arg.
1935
- if (expr.callee.kind === "memberAccess" &&
1936
- expr.callee.memberBinding?.isExtensionMethod &&
1937
- isInstanceMemberAccess(expr.callee, context)) {
1938
- let currentContext = context;
1939
- const binding = expr.callee.memberBinding;
1940
- const receiverExpr = expr.callee.object;
1941
- const [receiverAst, receiverContext] = emitExpressionAst(receiverExpr, currentContext);
1942
- currentContext = receiverContext;
1943
- // Fluent extension method path
1944
- if (shouldEmitFluentExtensionCall(binding)) {
1945
- const ns = getTypeNamespace(binding.type);
1946
- if (ns) {
1947
- currentContext.usings.add(ns);
1948
- }
1949
- let typeArgAsts = [];
1950
- if (expr.typeArguments && expr.typeArguments.length > 0) {
1951
- const [typeArgs, typeContext] = emitTypeArgumentsAst(expr.typeArguments, currentContext);
1952
- typeArgAsts = typeArgs;
1953
- currentContext = typeContext;
1954
- }
1955
- const [argAsts, argContext] = emitCallArguments(expr.arguments, expr, currentContext);
1956
- currentContext = argContext;
1957
- const memberAccess = expr.isOptional
1958
- ? {
1959
- kind: "conditionalMemberAccessExpression",
1960
- expression: receiverAst,
1961
- memberName: binding.member,
1962
- }
1963
- : {
1964
- kind: "memberAccessExpression",
1965
- expression: receiverAst,
1966
- memberName: binding.member,
1967
- };
1968
- const invocation = {
1969
- kind: "invocationExpression",
1970
- expression: memberAccess,
1971
- arguments: argAsts,
1972
- typeArguments: typeArgAsts.length > 0 ? typeArgAsts : undefined,
1973
- };
1974
- return [
1975
- wrapIntCast(needsIntCast(expr, binding.member), invocation),
1976
- currentContext,
1977
- ];
1978
- }
1979
- let finalCalleeName = `global::${binding.type}.${binding.member}`;
1980
- let typeArgAsts = [];
1981
- if (expr.typeArguments && expr.typeArguments.length > 0) {
1982
- if (expr.requiresSpecialization) {
1983
- const [specializedName, specContext] = generateSpecializedName(finalCalleeName, expr.typeArguments, currentContext);
1984
- finalCalleeName = specializedName;
1985
- currentContext = specContext;
1986
- }
1987
- else {
1988
- const [typeArgs, typeContext] = emitTypeArgumentsAst(expr.typeArguments, currentContext);
1989
- typeArgAsts = typeArgs;
1990
- currentContext = typeContext;
1991
- }
1992
- }
1993
- const [argAsts, argContext] = emitCallArguments(expr.arguments, expr, currentContext);
1994
- currentContext = argContext;
1995
- // Prepend receiver as first argument (static extension call)
1996
- const allArgAsts = [
1997
- receiverAst,
1998
- ...argAsts,
1999
- ];
2000
- const invocation = {
2001
- kind: "invocationExpression",
2002
- expression: identifierExpression(finalCalleeName),
2003
- arguments: allArgAsts,
2004
- typeArguments: typeArgAsts.length > 0 ? typeArgAsts : undefined,
2005
- };
2006
- // Wrap in ToArray() if result type is array
2007
- const callAst = expr.inferredType?.kind === "arrayType"
2008
- ? {
2009
- kind: "invocationExpression",
2010
- expression: identifierExpression("global::System.Linq.Enumerable.ToArray"),
2011
- arguments: [invocation],
2012
- }
2013
- : invocation;
2014
- return [
2015
- wrapIntCast(needsIntCast(expr, finalCalleeName), callAst),
2016
- currentContext,
2017
- ];
2018
- }
2019
- const arrayWrapperInteropCall = emitArrayWrapperInteropCall(expr, context);
2020
- const arrayMutationInteropCall = emitArrayMutationInteropCall(expr, context);
291
+ const arrayWrapperInteropCall = emitArrayWrapperInteropCall(normalizedExpr, context, expectedType);
292
+ const arrayMutationInteropCall = emitArrayMutationInteropCall(normalizedExpr, context);
2021
293
  if (arrayMutationInteropCall) {
2022
294
  return arrayMutationInteropCall;
2023
295
  }
2024
296
  if (arrayWrapperInteropCall) {
2025
297
  return arrayWrapperInteropCall;
2026
298
  }
299
+ // Extension method lowering — delegated to call-extension-methods.ts
300
+ // Keep this after native array interop so lifted/static container array
301
+ // mutation calls cannot fall through to copy-based source-owned array syntax.
302
+ const extensionResult = tryEmitExtensionMethodCall(normalizedExpr, context, expectedType);
303
+ if (extensionResult) {
304
+ return extensionResult;
305
+ }
306
+ const callableStaticAccessor = tryGetCallableStaticAccessorCall(normalizedExpr);
307
+ if (callableStaticAccessor) {
308
+ return emitCallableStaticAccessorCall(normalizedExpr, callableStaticAccessor.binding, context);
309
+ }
2027
310
  // Regular function call
2028
- const [calleeAst, newContext] = expr.callee.kind === "memberAccess"
2029
- ? emitMemberAccess(expr.callee, context, "call")
2030
- : emitExpressionAst(expr.callee, context);
311
+ const calleeExprForEmission = normalizedExpr.callee;
312
+ const shouldPreferParameterExpectedType = transparentCalleeIdentifier !== undefined &&
313
+ context.promiseResolveValueTypes?.has(transparentCalleeIdentifier.name) ===
314
+ true;
315
+ const calleeExpectedType = calleeExprForEmission.kind === "memberAccess"
316
+ ? undefined
317
+ : buildCallTargetExpectedType(normalizedExpr, shouldPreferParameterExpectedType);
318
+ const [calleeAst, newContext] = calleeExprForEmission.kind === "memberAccess"
319
+ ? emitMemberAccess(calleeExprForEmission, context, "call")
320
+ : emitExpressionAst(calleeExprForEmission, context, calleeExpectedType);
2031
321
  let currentContext = newContext;
2032
322
  let calleeExpr = calleeAst;
2033
323
  let typeArgAsts = [];
2034
- if (expr.typeArguments && expr.typeArguments.length > 0) {
2035
- if (expr.requiresSpecialization) {
324
+ if (calleeExpr.kind === "lambdaExpression") {
325
+ const castedLambdaTarget = castInvokedLambdaTarget(calleeExpr, calleeExpectedType, currentContext);
326
+ calleeExpr = castedLambdaTarget[0];
327
+ currentContext = castedLambdaTarget[1];
328
+ }
329
+ if (normalizedExpr.typeArguments && normalizedExpr.typeArguments.length > 0) {
330
+ if (normalizedExpr.requiresSpecialization) {
2036
331
  const calleeText = extractCalleeNameFromAst(calleeAst);
2037
- const [specializedName, specContext] = generateSpecializedName(calleeText, expr.typeArguments, currentContext);
332
+ const [specializedName, specContext] = generateSpecializedName(calleeText, normalizedExpr.typeArguments, currentContext);
2038
333
  calleeExpr = {
2039
334
  kind: "identifierExpression",
2040
335
  identifier: specializedName,
@@ -2042,15 +337,16 @@ export const emitCall = (expr, context) => {
2042
337
  currentContext = specContext;
2043
338
  }
2044
339
  else {
2045
- const [typeArgs, typeContext] = emitTypeArgumentsAst(expr.typeArguments, currentContext);
340
+ const [typeArgs, typeContext] = emitTypeArgumentsAst(normalizedExpr.typeArguments, currentContext);
2046
341
  typeArgAsts = typeArgs;
2047
342
  currentContext = typeContext;
2048
343
  }
2049
344
  }
2050
- const [argAsts, argContext] = emitCallArguments(expr.arguments, expr, currentContext);
345
+ const structuralViewParameterTypes = resolveStructuralViewCallParameterTypes(normalizedExpr.callee, currentContext);
346
+ const [argAsts, argContext] = emitCallArguments(normalizedExpr.arguments, normalizedExpr, currentContext, structuralViewParameterTypes);
2051
347
  currentContext = argContext;
2052
348
  // Build the invocation target (may need optional chaining wrapper)
2053
- const invocationTarget = expr.isOptional
349
+ const invocationTarget = normalizedExpr.isOptional
2054
350
  ? (() => {
2055
351
  // Optional call: callee?.(args) — in C# this requires the callee to be
2056
352
  // a delegate and the call to be ?.Invoke(). For member access callees
@@ -2072,9 +368,26 @@ export const emitCall = (expr, context) => {
2072
368
  arguments: argAsts,
2073
369
  typeArguments: typeArgAsts.length > 0 ? typeArgAsts : undefined,
2074
370
  };
371
+ const shouldCastSuperCallResult = normalizedExpr.callee.kind === "memberAccess" &&
372
+ normalizedExpr.callee.object.kind === "identifier" &&
373
+ normalizedExpr.callee.object.name === "super" &&
374
+ !!expectedType &&
375
+ expectedType.kind !== "voidType" &&
376
+ expectedType.kind !== "anyType" &&
377
+ expectedType.kind !== "unknownType";
378
+ let finalInvocation = invocation;
379
+ if (shouldCastSuperCallResult && expectedType) {
380
+ const [expectedTypeAst, expectedTypeContext] = emitTypeAst(expectedType, currentContext);
381
+ finalInvocation = {
382
+ kind: "castExpression",
383
+ type: expectedTypeAst,
384
+ expression: invocation,
385
+ };
386
+ currentContext = expectedTypeContext;
387
+ }
2075
388
  const calleeText = extractCalleeNameFromAst(calleeAst);
2076
389
  return [
2077
- wrapIntCast(needsIntCast(expr, calleeText), invocation),
390
+ wrapIntCast(needsIntCast(normalizedExpr, calleeText), finalInvocation),
2078
391
  currentContext,
2079
392
  ];
2080
393
  };