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