@tsonic/emitter 0.0.61 → 0.0.63

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 (531) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-generator.d.ts +5 -15
  3. package/dist/adapter-generator.d.ts.map +1 -1
  4. package/dist/adapter-generator.js +60 -53
  5. package/dist/adapter-generator.js.map +1 -1
  6. package/dist/contracts/backend-adapter.d.ts +36 -0
  7. package/dist/contracts/backend-adapter.d.ts.map +1 -0
  8. package/dist/contracts/backend-adapter.js +9 -0
  9. package/dist/contracts/backend-adapter.js.map +1 -0
  10. package/dist/contracts/emitter-contract.d.ts +54 -0
  11. package/dist/contracts/emitter-contract.d.ts.map +1 -0
  12. package/dist/contracts/emitter-contract.js +8 -0
  13. package/dist/contracts/emitter-contract.js.map +1 -0
  14. package/dist/contracts/import-classifier.d.ts +36 -0
  15. package/dist/contracts/import-classifier.d.ts.map +1 -0
  16. package/dist/contracts/import-classifier.js +9 -0
  17. package/dist/contracts/import-classifier.js.map +1 -0
  18. package/dist/core/{attributes.d.ts → format/attributes.d.ts} +9 -14
  19. package/dist/core/format/attributes.d.ts.map +1 -0
  20. package/dist/core/format/attributes.js +190 -0
  21. package/dist/core/format/attributes.js.map +1 -0
  22. package/dist/core/format/attributes.test.d.ts.map +1 -0
  23. package/dist/core/{attributes.test.js → format/attributes.test.js} +70 -32
  24. package/dist/core/format/attributes.test.js.map +1 -0
  25. package/dist/core/format/backend-ast/index.d.ts +7 -0
  26. package/dist/core/format/backend-ast/index.d.ts.map +1 -0
  27. package/dist/core/format/backend-ast/index.js +6 -0
  28. package/dist/core/format/backend-ast/index.js.map +1 -0
  29. package/dist/core/format/backend-ast/printer.d.ts +33 -0
  30. package/dist/core/format/backend-ast/printer.d.ts.map +1 -0
  31. package/dist/core/format/backend-ast/printer.js +1151 -0
  32. package/dist/core/format/backend-ast/printer.js.map +1 -0
  33. package/dist/core/format/backend-ast/types.d.ts +504 -0
  34. package/dist/core/format/backend-ast/types.d.ts.map +1 -0
  35. package/dist/core/format/backend-ast/types.js +13 -0
  36. package/dist/core/format/backend-ast/types.js.map +1 -0
  37. package/dist/core/format/backend-ast/utils.d.ts +26 -0
  38. package/dist/core/format/backend-ast/utils.d.ts.map +1 -0
  39. package/dist/core/format/backend-ast/utils.js +65 -0
  40. package/dist/core/format/backend-ast/utils.js.map +1 -0
  41. package/dist/core/{exports.d.ts → format/exports.d.ts} +2 -2
  42. package/dist/core/format/exports.d.ts.map +1 -0
  43. package/dist/core/format/exports.js +22 -0
  44. package/dist/core/format/exports.js.map +1 -0
  45. package/dist/core/format/index.d.ts +9 -0
  46. package/dist/core/format/index.d.ts.map +1 -0
  47. package/dist/core/format/index.js +9 -0
  48. package/dist/core/format/index.js.map +1 -0
  49. package/dist/core/{local-names.d.ts → format/local-names.d.ts} +1 -1
  50. package/dist/core/format/local-names.d.ts.map +1 -0
  51. package/dist/core/{local-names.js → format/local-names.js} +3 -2
  52. package/dist/core/format/local-names.js.map +1 -0
  53. package/dist/core/format/module-emitter/assembly.d.ts +27 -0
  54. package/dist/core/format/module-emitter/assembly.d.ts.map +1 -0
  55. package/dist/core/format/module-emitter/assembly.js +44 -0
  56. package/dist/core/format/module-emitter/assembly.js.map +1 -0
  57. package/dist/core/{module-emitter → format/module-emitter}/header.d.ts +1 -1
  58. package/dist/core/format/module-emitter/header.d.ts.map +1 -0
  59. package/dist/core/{module-emitter → format/module-emitter}/header.js +1 -1
  60. package/dist/core/format/module-emitter/header.js.map +1 -0
  61. package/dist/core/format/module-emitter/index.d.ts.map +1 -0
  62. package/dist/core/format/module-emitter/index.js.map +1 -0
  63. package/dist/core/format/module-emitter/namespace.d.ts +21 -0
  64. package/dist/core/format/module-emitter/namespace.d.ts.map +1 -0
  65. package/dist/core/format/module-emitter/namespace.js +58 -0
  66. package/dist/core/format/module-emitter/namespace.js.map +1 -0
  67. package/dist/core/{module-emitter → format/module-emitter}/orchestrator.d.ts +1 -1
  68. package/dist/core/format/module-emitter/orchestrator.d.ts.map +1 -0
  69. package/dist/core/format/module-emitter/orchestrator.js +254 -0
  70. package/dist/core/format/module-emitter/orchestrator.js.map +1 -0
  71. package/dist/core/format/module-emitter/separation.d.ts.map +1 -0
  72. package/dist/core/format/module-emitter/separation.js.map +1 -0
  73. package/dist/core/{module-emitter → format/module-emitter}/static-container.d.ts +8 -3
  74. package/dist/core/format/module-emitter/static-container.d.ts.map +1 -0
  75. package/dist/core/format/module-emitter/static-container.js +202 -0
  76. package/dist/core/format/module-emitter/static-container.js.map +1 -0
  77. package/dist/core/format/module-emitter.d.ts.map +1 -0
  78. package/dist/core/format/module-emitter.js.map +1 -0
  79. package/dist/core/{options.d.ts → format/options.d.ts} +1 -1
  80. package/dist/core/format/options.d.ts.map +1 -0
  81. package/dist/core/format/options.js.map +1 -0
  82. package/dist/core/index.d.ts +2 -7
  83. package/dist/core/index.d.ts.map +1 -1
  84. package/dist/core/index.js +2 -7
  85. package/dist/core/index.js.map +1 -1
  86. package/dist/core/module-emitter.test.js.map +1 -1
  87. package/dist/core/semantic/boolean-context.d.ts +44 -0
  88. package/dist/core/semantic/boolean-context.d.ts.map +1 -0
  89. package/dist/core/semantic/boolean-context.js +655 -0
  90. package/dist/core/semantic/boolean-context.js.map +1 -0
  91. package/dist/core/semantic/boolean-context.test.d.ts.map +1 -0
  92. package/dist/core/{boolean-context.test.js → semantic/boolean-context.test.js} +56 -103
  93. package/dist/core/semantic/boolean-context.test.js.map +1 -0
  94. package/dist/core/{imports.d.ts → semantic/imports.d.ts} +1 -5
  95. package/dist/core/semantic/imports.d.ts.map +1 -0
  96. package/dist/core/{imports.js → semantic/imports.js} +9 -78
  97. package/dist/core/semantic/imports.js.map +1 -0
  98. package/dist/core/semantic/imports.test.d.ts.map +1 -0
  99. package/dist/core/{imports.test.js → semantic/imports.test.js} +1 -1
  100. package/dist/core/semantic/imports.test.js.map +1 -0
  101. package/dist/core/semantic/index.d.ts +15 -0
  102. package/dist/core/semantic/index.d.ts.map +1 -0
  103. package/dist/core/semantic/index.js +15 -0
  104. package/dist/core/semantic/index.js.map +1 -0
  105. package/dist/core/{local-types.d.ts → semantic/local-types.d.ts} +1 -1
  106. package/dist/core/semantic/local-types.d.ts.map +1 -0
  107. package/dist/core/semantic/local-types.js.map +1 -0
  108. package/dist/core/{module-map.d.ts → semantic/module-map.d.ts} +1 -1
  109. package/dist/core/semantic/module-map.d.ts.map +1 -0
  110. package/dist/core/semantic/module-map.js.map +1 -0
  111. package/dist/core/semantic/module-map.test.d.ts.map +1 -0
  112. package/dist/core/semantic/module-map.test.js.map +1 -0
  113. package/dist/core/semantic/naming-collisions.d.ts.map +1 -0
  114. package/dist/core/{naming-collisions.js → semantic/naming-collisions.js} +3 -2
  115. package/dist/core/semantic/naming-collisions.js.map +1 -0
  116. package/dist/core/{type-alias-index.d.ts → semantic/type-alias-index.d.ts} +1 -1
  117. package/dist/core/semantic/type-alias-index.d.ts.map +1 -0
  118. package/dist/core/semantic/type-alias-index.js.map +1 -0
  119. package/dist/core/semantic/type-compatibility.d.ts.map +1 -0
  120. package/dist/core/semantic/type-compatibility.js.map +1 -0
  121. package/dist/core/{type-member-index.d.ts → semantic/type-member-index.d.ts} +1 -1
  122. package/dist/core/semantic/type-member-index.d.ts.map +1 -0
  123. package/dist/core/semantic/type-member-index.js.map +1 -0
  124. package/dist/core/semantic/type-params.d.ts.map +1 -0
  125. package/dist/core/semantic/type-params.js.map +1 -0
  126. package/dist/core/{type-resolution.d.ts → semantic/type-resolution.d.ts} +3 -6
  127. package/dist/core/semantic/type-resolution.d.ts.map +1 -0
  128. package/dist/core/{type-resolution.js → semantic/type-resolution.js} +78 -47
  129. package/dist/core/semantic/type-resolution.js.map +1 -0
  130. package/dist/core/semantic/type-resolution.test.d.ts.map +1 -0
  131. package/dist/core/{type-resolution.test.js → semantic/type-resolution.test.js} +155 -20
  132. package/dist/core/semantic/type-resolution.test.js.map +1 -0
  133. package/dist/core/semantic/unsafe.d.ts.map +1 -0
  134. package/dist/core/{unsafe.js → semantic/unsafe.js} +8 -6
  135. package/dist/core/semantic/unsafe.js.map +1 -0
  136. package/dist/emitter-types/core.d.ts +50 -12
  137. package/dist/emitter-types/core.d.ts.map +1 -1
  138. package/dist/emitter-types/index.d.ts +1 -1
  139. package/dist/emitter-types/index.d.ts.map +1 -1
  140. package/dist/emitter-types/index.js.map +1 -1
  141. package/dist/emitter.d.ts +1 -1
  142. package/dist/emitter.d.ts.map +1 -1
  143. package/dist/emitter.js +216 -16
  144. package/dist/emitter.js.map +1 -1
  145. package/dist/expression-emitter.d.ts +10 -5
  146. package/dist/expression-emitter.d.ts.map +1 -1
  147. package/dist/expression-emitter.js +135 -121
  148. package/dist/expression-emitter.js.map +1 -1
  149. package/dist/expressions/access.d.ts +4 -3
  150. package/dist/expressions/access.d.ts.map +1 -1
  151. package/dist/expressions/access.js +299 -109
  152. package/dist/expressions/access.js.map +1 -1
  153. package/dist/expressions/calls/call-analysis.d.ts +86 -0
  154. package/dist/expressions/calls/call-analysis.d.ts.map +1 -0
  155. package/dist/expressions/calls/call-analysis.js +284 -0
  156. package/dist/expressions/calls/call-analysis.js.map +1 -0
  157. package/dist/expressions/calls/call-emitter.d.ts +13 -0
  158. package/dist/expressions/calls/call-emitter.d.ts.map +1 -0
  159. package/dist/expressions/calls/call-emitter.js +876 -0
  160. package/dist/expressions/calls/call-emitter.js.map +1 -0
  161. package/dist/expressions/calls/new-emitter.d.ts +13 -0
  162. package/dist/expressions/calls/new-emitter.d.ts.map +1 -0
  163. package/dist/expressions/calls/new-emitter.js +641 -0
  164. package/dist/expressions/calls/new-emitter.js.map +1 -0
  165. package/dist/expressions/calls.d.ts +2 -14
  166. package/dist/expressions/calls.d.ts.map +1 -1
  167. package/dist/expressions/calls.js +2 -744
  168. package/dist/expressions/calls.js.map +1 -1
  169. package/dist/expressions/collections.d.ts +6 -16
  170. package/dist/expressions/collections.d.ts.map +1 -1
  171. package/dist/expressions/collections.js +303 -218
  172. package/dist/expressions/collections.js.map +1 -1
  173. package/dist/expressions/functions.d.ts +6 -5
  174. package/dist/expressions/functions.d.ts.map +1 -1
  175. package/dist/expressions/functions.js +57 -62
  176. package/dist/expressions/functions.js.map +1 -1
  177. package/dist/expressions/identifiers.d.ts +11 -6
  178. package/dist/expressions/identifiers.d.ts.map +1 -1
  179. package/dist/expressions/identifiers.js +81 -25
  180. package/dist/expressions/identifiers.js.map +1 -1
  181. package/dist/expressions/index.d.ts +1 -1
  182. package/dist/expressions/index.d.ts.map +1 -1
  183. package/dist/expressions/index.js +1 -1
  184. package/dist/expressions/index.js.map +1 -1
  185. package/dist/expressions/index.test.js +522 -3
  186. package/dist/expressions/index.test.js.map +1 -1
  187. package/dist/expressions/literals.d.ts +4 -3
  188. package/dist/expressions/literals.d.ts.map +1 -1
  189. package/dist/expressions/literals.js +25 -17
  190. package/dist/expressions/literals.js.map +1 -1
  191. package/dist/expressions/literals.test.js +18 -18
  192. package/dist/expressions/literals.test.js.map +1 -1
  193. package/dist/expressions/operators/assignment-emitter.d.ts +16 -0
  194. package/dist/expressions/operators/assignment-emitter.d.ts.map +1 -0
  195. package/dist/expressions/operators/assignment-emitter.js +118 -0
  196. package/dist/expressions/operators/assignment-emitter.js.map +1 -0
  197. package/dist/expressions/operators/binary-emitter.d.ts +33 -0
  198. package/dist/expressions/operators/binary-emitter.d.ts.map +1 -0
  199. package/dist/expressions/operators/binary-emitter.js +398 -0
  200. package/dist/expressions/operators/binary-emitter.js.map +1 -0
  201. package/dist/expressions/operators/conditional-emitter.d.ts +17 -0
  202. package/dist/expressions/operators/conditional-emitter.d.ts.map +1 -0
  203. package/dist/expressions/operators/conditional-emitter.js +306 -0
  204. package/dist/expressions/operators/conditional-emitter.js.map +1 -0
  205. package/dist/expressions/operators/helpers.d.ts +37 -0
  206. package/dist/expressions/operators/helpers.d.ts.map +1 -0
  207. package/dist/expressions/operators/helpers.js +136 -0
  208. package/dist/expressions/operators/helpers.js.map +1 -0
  209. package/dist/expressions/operators/logical-emitter.d.ts +23 -0
  210. package/dist/expressions/operators/logical-emitter.d.ts.map +1 -0
  211. package/dist/expressions/operators/logical-emitter.js +73 -0
  212. package/dist/expressions/operators/logical-emitter.js.map +1 -0
  213. package/dist/expressions/operators/unary-emitter.d.ts +30 -0
  214. package/dist/expressions/operators/unary-emitter.d.ts.map +1 -0
  215. package/dist/expressions/operators/unary-emitter.js +244 -0
  216. package/dist/expressions/operators/unary-emitter.js.map +1 -0
  217. package/dist/expressions/operators.d.ts +5 -81
  218. package/dist/expressions/operators.d.ts.map +1 -1
  219. package/dist/expressions/operators.js +5 -868
  220. package/dist/expressions/operators.js.map +1 -1
  221. package/dist/expressions/other.d.ts +15 -11
  222. package/dist/expressions/other.d.ts.map +1 -1
  223. package/dist/expressions/other.js +55 -38
  224. package/dist/expressions/other.js.map +1 -1
  225. package/dist/expressions/parentheses.d.ts.map +1 -1
  226. package/dist/expressions/parentheses.js +2 -1
  227. package/dist/expressions/parentheses.js.map +1 -1
  228. package/dist/expressions/precedence.test.js +6 -2
  229. package/dist/expressions/precedence.test.js.map +1 -1
  230. package/dist/generator-exchange.d.ts +10 -3
  231. package/dist/generator-exchange.d.ts.map +1 -1
  232. package/dist/generator-exchange.js +57 -54
  233. package/dist/generator-exchange.js.map +1 -1
  234. package/dist/generator-wrapper.d.ts +17 -65
  235. package/dist/generator-wrapper.d.ts.map +1 -1
  236. package/dist/generator-wrapper.js +396 -220
  237. package/dist/generator-wrapper.js.map +1 -1
  238. package/dist/generator-wrapper.test.js +22 -14
  239. package/dist/generator-wrapper.test.js.map +1 -1
  240. package/dist/golden-shards.d.ts.map +1 -1
  241. package/dist/golden-shards.js.map +1 -1
  242. package/dist/golden-tests/runner.d.ts.map +1 -1
  243. package/dist/golden-tests/runner.js +3 -1
  244. package/dist/golden-tests/runner.js.map +1 -1
  245. package/dist/integration.test.js +166 -1
  246. package/dist/integration.test.js.map +1 -1
  247. package/dist/json-aot-generic.test.js +8 -2
  248. package/dist/json-aot-generic.test.js.map +1 -1
  249. package/dist/patterns.d.ts +18 -88
  250. package/dist/patterns.d.ts.map +1 -1
  251. package/dist/patterns.js +540 -304
  252. package/dist/patterns.js.map +1 -1
  253. package/dist/patterns.test.js +5 -4
  254. package/dist/patterns.test.js.map +1 -1
  255. package/dist/specialization/generation.d.ts +7 -3
  256. package/dist/specialization/generation.d.ts.map +1 -1
  257. package/dist/specialization/generation.js +32 -16
  258. package/dist/specialization/generation.js.map +1 -1
  259. package/dist/specialization/type-aliases.test.js +3 -2
  260. package/dist/specialization/type-aliases.test.js.map +1 -1
  261. package/dist/statement-emitter.d.ts +15 -4
  262. package/dist/statement-emitter.d.ts.map +1 -1
  263. package/dist/statement-emitter.js +54 -47
  264. package/dist/statement-emitter.js.map +1 -1
  265. package/dist/statements/blocks.d.ts +24 -16
  266. package/dist/statements/blocks.d.ts.map +1 -1
  267. package/dist/statements/blocks.js +193 -66
  268. package/dist/statements/blocks.js.map +1 -1
  269. package/dist/statements/classes/index.d.ts +1 -1
  270. package/dist/statements/classes/index.d.ts.map +1 -1
  271. package/dist/statements/classes/index.js +1 -1
  272. package/dist/statements/classes/index.js.map +1 -1
  273. package/dist/statements/classes/inline-types.d.ts +4 -3
  274. package/dist/statements/classes/inline-types.d.ts.map +1 -1
  275. package/dist/statements/classes/inline-types.js +21 -21
  276. package/dist/statements/classes/inline-types.js.map +1 -1
  277. package/dist/statements/classes/members/constructors.d.ts +4 -3
  278. package/dist/statements/classes/members/constructors.d.ts.map +1 -1
  279. package/dist/statements/classes/members/constructors.js +57 -58
  280. package/dist/statements/classes/members/constructors.js.map +1 -1
  281. package/dist/statements/classes/members/methods.d.ts +4 -3
  282. package/dist/statements/classes/members/methods.d.ts.map +1 -1
  283. package/dist/statements/classes/members/methods.js +98 -98
  284. package/dist/statements/classes/members/methods.js.map +1 -1
  285. package/dist/statements/classes/members/orchestrator.d.ts +4 -3
  286. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
  287. package/dist/statements/classes/members/orchestrator.js +2 -2
  288. package/dist/statements/classes/members/orchestrator.js.map +1 -1
  289. package/dist/statements/classes/members/properties.d.ts +4 -3
  290. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  291. package/dist/statements/classes/members/properties.js +109 -89
  292. package/dist/statements/classes/members/properties.js.map +1 -1
  293. package/dist/statements/classes/members/shadowing.test.js +7 -2
  294. package/dist/statements/classes/members/shadowing.test.js.map +1 -1
  295. package/dist/statements/classes/members/static-readonly-properties.test.js +10 -2
  296. package/dist/statements/classes/members/static-readonly-properties.test.js.map +1 -1
  297. package/dist/statements/classes/parameters.d.ts +8 -10
  298. package/dist/statements/classes/parameters.d.ts.map +1 -1
  299. package/dist/statements/classes/parameters.js +30 -26
  300. package/dist/statements/classes/parameters.js.map +1 -1
  301. package/dist/statements/classes/properties.d.ts +4 -3
  302. package/dist/statements/classes/properties.d.ts.map +1 -1
  303. package/dist/statements/classes/properties.js +76 -50
  304. package/dist/statements/classes/properties.js.map +1 -1
  305. package/dist/statements/classes.d.ts +1 -1
  306. package/dist/statements/classes.d.ts.map +1 -1
  307. package/dist/statements/classes.js +1 -1
  308. package/dist/statements/classes.js.map +1 -1
  309. package/dist/statements/control/conditionals/guard-analysis.d.ts +169 -0
  310. package/dist/statements/control/conditionals/guard-analysis.d.ts.map +1 -0
  311. package/dist/statements/control/conditionals/guard-analysis.js +591 -0
  312. package/dist/statements/control/conditionals/guard-analysis.js.map +1 -0
  313. package/dist/statements/control/conditionals/if-emitter.d.ts +14 -0
  314. package/dist/statements/control/conditionals/if-emitter.d.ts.map +1 -0
  315. package/dist/statements/control/conditionals/if-emitter.js +725 -0
  316. package/dist/statements/control/conditionals/if-emitter.js.map +1 -0
  317. package/dist/statements/control/conditionals/switch-emitter.d.ts +13 -0
  318. package/dist/statements/control/conditionals/switch-emitter.d.ts.map +1 -0
  319. package/dist/statements/control/conditionals/switch-emitter.js +60 -0
  320. package/dist/statements/control/conditionals/switch-emitter.js.map +1 -0
  321. package/dist/statements/control/conditionals.d.ts +3 -15
  322. package/dist/statements/control/conditionals.d.ts.map +1 -1
  323. package/dist/statements/control/conditionals.js +3 -1065
  324. package/dist/statements/control/conditionals.js.map +1 -1
  325. package/dist/statements/control/exceptions.d.ts +8 -6
  326. package/dist/statements/control/exceptions.d.ts.map +1 -1
  327. package/dist/statements/control/exceptions.js +35 -23
  328. package/dist/statements/control/exceptions.js.map +1 -1
  329. package/dist/statements/control/index.d.ts +3 -3
  330. package/dist/statements/control/index.d.ts.map +1 -1
  331. package/dist/statements/control/index.js +3 -3
  332. package/dist/statements/control/index.js.map +1 -1
  333. package/dist/statements/control/loops.d.ts +14 -12
  334. package/dist/statements/control/loops.d.ts.map +1 -1
  335. package/dist/statements/control/loops.js +147 -82
  336. package/dist/statements/control/loops.js.map +1 -1
  337. package/dist/statements/control.d.ts +1 -1
  338. package/dist/statements/control.d.ts.map +1 -1
  339. package/dist/statements/control.js +1 -1
  340. package/dist/statements/control.js.map +1 -1
  341. package/dist/statements/declarations/classes.d.ts +7 -3
  342. package/dist/statements/declarations/classes.d.ts.map +1 -1
  343. package/dist/statements/declarations/classes.js +72 -86
  344. package/dist/statements/declarations/classes.js.map +1 -1
  345. package/dist/statements/declarations/enums.d.ts +4 -3
  346. package/dist/statements/declarations/enums.d.ts.map +1 -1
  347. package/dist/statements/declarations/enums.js +18 -16
  348. package/dist/statements/declarations/enums.js.map +1 -1
  349. package/dist/statements/declarations/functions.d.ts +18 -2
  350. package/dist/statements/declarations/functions.d.ts.map +1 -1
  351. package/dist/statements/declarations/functions.js +625 -159
  352. package/dist/statements/declarations/functions.js.map +1 -1
  353. package/dist/statements/declarations/index.d.ts +2 -2
  354. package/dist/statements/declarations/index.d.ts.map +1 -1
  355. package/dist/statements/declarations/index.js +2 -2
  356. package/dist/statements/declarations/index.js.map +1 -1
  357. package/dist/statements/declarations/interfaces.d.ts +7 -3
  358. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  359. package/dist/statements/declarations/interfaces.js +121 -107
  360. package/dist/statements/declarations/interfaces.js.map +1 -1
  361. package/dist/statements/declarations/type-aliases.d.ts +7 -3
  362. package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
  363. package/dist/statements/declarations/type-aliases.js +95 -79
  364. package/dist/statements/declarations/type-aliases.js.map +1 -1
  365. package/dist/statements/declarations/variables.d.ts +12 -2
  366. package/dist/statements/declarations/variables.d.ts.map +1 -1
  367. package/dist/statements/declarations/variables.js +535 -424
  368. package/dist/statements/declarations/variables.js.map +1 -1
  369. package/dist/statements/declarations.d.ts +1 -1
  370. package/dist/statements/declarations.d.ts.map +1 -1
  371. package/dist/statements/declarations.js +1 -1
  372. package/dist/statements/declarations.js.map +1 -1
  373. package/dist/statements/index.d.ts +3 -3
  374. package/dist/statements/index.d.ts.map +1 -1
  375. package/dist/statements/index.js +5 -5
  376. package/dist/statements/index.js.map +1 -1
  377. package/dist/type-emitter.d.ts +1 -1
  378. package/dist/type-emitter.d.ts.map +1 -1
  379. package/dist/type-emitter.js +1 -1
  380. package/dist/type-emitter.js.map +1 -1
  381. package/dist/types/arrays.d.ts +3 -2
  382. package/dist/types/arrays.d.ts.map +1 -1
  383. package/dist/types/arrays.js +7 -5
  384. package/dist/types/arrays.js.map +1 -1
  385. package/dist/types/dictionaries.d.ts +6 -3
  386. package/dist/types/dictionaries.d.ts.map +1 -1
  387. package/dist/types/dictionaries.js +22 -10
  388. package/dist/types/dictionaries.js.map +1 -1
  389. package/dist/types/emitter.d.ts +8 -2
  390. package/dist/types/emitter.d.ts.map +1 -1
  391. package/dist/types/emitter.js +23 -6
  392. package/dist/types/emitter.js.map +1 -1
  393. package/dist/types/functions.d.ts +3 -2
  394. package/dist/types/functions.d.ts.map +1 -1
  395. package/dist/types/functions.js +36 -13
  396. package/dist/types/functions.js.map +1 -1
  397. package/dist/types/index.d.ts +2 -2
  398. package/dist/types/index.d.ts.map +1 -1
  399. package/dist/types/index.js +2 -2
  400. package/dist/types/index.js.map +1 -1
  401. package/dist/types/index.test.js +137 -0
  402. package/dist/types/index.test.js.map +1 -1
  403. package/dist/types/intersections.d.ts +3 -2
  404. package/dist/types/intersections.d.ts.map +1 -1
  405. package/dist/types/intersections.js +2 -2
  406. package/dist/types/intersections.js.map +1 -1
  407. package/dist/types/literals.d.ts +9 -2
  408. package/dist/types/literals.d.ts.map +1 -1
  409. package/dist/types/literals.js +11 -5
  410. package/dist/types/literals.js.map +1 -1
  411. package/dist/types/objects.d.ts +3 -2
  412. package/dist/types/objects.d.ts.map +1 -1
  413. package/dist/types/objects.js +1 -1
  414. package/dist/types/objects.js.map +1 -1
  415. package/dist/types/parameters.d.ts +6 -5
  416. package/dist/types/parameters.d.ts.map +1 -1
  417. package/dist/types/parameters.js +92 -31
  418. package/dist/types/parameters.js.map +1 -1
  419. package/dist/types/parameters.test.js +9 -4
  420. package/dist/types/parameters.test.js.map +1 -1
  421. package/dist/types/primitives.d.ts +5 -4
  422. package/dist/types/primitives.d.ts.map +1 -1
  423. package/dist/types/primitives.js +14 -13
  424. package/dist/types/primitives.js.map +1 -1
  425. package/dist/types/references.d.ts +3 -2
  426. package/dist/types/references.d.ts.map +1 -1
  427. package/dist/types/references.js +187 -104
  428. package/dist/types/references.js.map +1 -1
  429. package/dist/types/references.test.js +138 -0
  430. package/dist/types/references.test.js.map +1 -1
  431. package/dist/types/tuples.d.ts +3 -2
  432. package/dist/types/tuples.d.ts.map +1 -1
  433. package/dist/types/tuples.js +25 -11
  434. package/dist/types/tuples.js.map +1 -1
  435. package/dist/types/unions.d.ts +3 -2
  436. package/dist/types/unions.d.ts.map +1 -1
  437. package/dist/types/unions.js +36 -21
  438. package/dist/types/unions.js.map +1 -1
  439. package/dist/types.d.ts +1 -1
  440. package/dist/types.d.ts.map +1 -1
  441. package/dist/types.js.map +1 -1
  442. package/package.json +2 -2
  443. package/dist/core/attributes.d.ts.map +0 -1
  444. package/dist/core/attributes.js +0 -141
  445. package/dist/core/attributes.js.map +0 -1
  446. package/dist/core/attributes.test.d.ts.map +0 -1
  447. package/dist/core/attributes.test.js.map +0 -1
  448. package/dist/core/boolean-context.d.ts +0 -42
  449. package/dist/core/boolean-context.d.ts.map +0 -1
  450. package/dist/core/boolean-context.js +0 -402
  451. package/dist/core/boolean-context.js.map +0 -1
  452. package/dist/core/boolean-context.test.d.ts.map +0 -1
  453. package/dist/core/boolean-context.test.js.map +0 -1
  454. package/dist/core/exports.d.ts.map +0 -1
  455. package/dist/core/exports.js +0 -28
  456. package/dist/core/exports.js.map +0 -1
  457. package/dist/core/imports.d.ts.map +0 -1
  458. package/dist/core/imports.js.map +0 -1
  459. package/dist/core/imports.test.d.ts.map +0 -1
  460. package/dist/core/imports.test.js.map +0 -1
  461. package/dist/core/local-names.d.ts.map +0 -1
  462. package/dist/core/local-names.js.map +0 -1
  463. package/dist/core/local-types.d.ts.map +0 -1
  464. package/dist/core/local-types.js.map +0 -1
  465. package/dist/core/module-emitter/assembly.d.ts +0 -24
  466. package/dist/core/module-emitter/assembly.d.ts.map +0 -1
  467. package/dist/core/module-emitter/assembly.js +0 -69
  468. package/dist/core/module-emitter/assembly.js.map +0 -1
  469. package/dist/core/module-emitter/header.d.ts.map +0 -1
  470. package/dist/core/module-emitter/header.js.map +0 -1
  471. package/dist/core/module-emitter/index.d.ts.map +0 -1
  472. package/dist/core/module-emitter/index.js.map +0 -1
  473. package/dist/core/module-emitter/namespace.d.ts +0 -14
  474. package/dist/core/module-emitter/namespace.d.ts.map +0 -1
  475. package/dist/core/module-emitter/namespace.js +0 -26
  476. package/dist/core/module-emitter/namespace.js.map +0 -1
  477. package/dist/core/module-emitter/orchestrator.d.ts.map +0 -1
  478. package/dist/core/module-emitter/orchestrator.js +0 -82
  479. package/dist/core/module-emitter/orchestrator.js.map +0 -1
  480. package/dist/core/module-emitter/separation.d.ts.map +0 -1
  481. package/dist/core/module-emitter/separation.js.map +0 -1
  482. package/dist/core/module-emitter/static-container.d.ts.map +0 -1
  483. package/dist/core/module-emitter/static-container.js +0 -139
  484. package/dist/core/module-emitter/static-container.js.map +0 -1
  485. package/dist/core/module-emitter.d.ts.map +0 -1
  486. package/dist/core/module-emitter.js.map +0 -1
  487. package/dist/core/module-map.d.ts.map +0 -1
  488. package/dist/core/module-map.js.map +0 -1
  489. package/dist/core/module-map.test.d.ts.map +0 -1
  490. package/dist/core/module-map.test.js.map +0 -1
  491. package/dist/core/naming-collisions.d.ts.map +0 -1
  492. package/dist/core/naming-collisions.js.map +0 -1
  493. package/dist/core/options.d.ts.map +0 -1
  494. package/dist/core/options.js.map +0 -1
  495. package/dist/core/type-alias-index.d.ts.map +0 -1
  496. package/dist/core/type-alias-index.js.map +0 -1
  497. package/dist/core/type-compatibility.d.ts.map +0 -1
  498. package/dist/core/type-compatibility.js.map +0 -1
  499. package/dist/core/type-member-index.d.ts.map +0 -1
  500. package/dist/core/type-member-index.js.map +0 -1
  501. package/dist/core/type-params.d.ts.map +0 -1
  502. package/dist/core/type-params.js.map +0 -1
  503. package/dist/core/type-resolution.d.ts.map +0 -1
  504. package/dist/core/type-resolution.js.map +0 -1
  505. package/dist/core/type-resolution.test.d.ts.map +0 -1
  506. package/dist/core/type-resolution.test.js.map +0 -1
  507. package/dist/core/unsafe.d.ts.map +0 -1
  508. package/dist/core/unsafe.js.map +0 -1
  509. /package/dist/core/{attributes.test.d.ts → format/attributes.test.d.ts} +0 -0
  510. /package/dist/core/{module-emitter → format/module-emitter}/index.d.ts +0 -0
  511. /package/dist/core/{module-emitter → format/module-emitter}/index.js +0 -0
  512. /package/dist/core/{module-emitter → format/module-emitter}/separation.d.ts +0 -0
  513. /package/dist/core/{module-emitter → format/module-emitter}/separation.js +0 -0
  514. /package/dist/core/{module-emitter.d.ts → format/module-emitter.d.ts} +0 -0
  515. /package/dist/core/{module-emitter.js → format/module-emitter.js} +0 -0
  516. /package/dist/core/{options.js → format/options.js} +0 -0
  517. /package/dist/core/{boolean-context.test.d.ts → semantic/boolean-context.test.d.ts} +0 -0
  518. /package/dist/core/{imports.test.d.ts → semantic/imports.test.d.ts} +0 -0
  519. /package/dist/core/{local-types.js → semantic/local-types.js} +0 -0
  520. /package/dist/core/{module-map.js → semantic/module-map.js} +0 -0
  521. /package/dist/core/{module-map.test.d.ts → semantic/module-map.test.d.ts} +0 -0
  522. /package/dist/core/{module-map.test.js → semantic/module-map.test.js} +0 -0
  523. /package/dist/core/{naming-collisions.d.ts → semantic/naming-collisions.d.ts} +0 -0
  524. /package/dist/core/{type-alias-index.js → semantic/type-alias-index.js} +0 -0
  525. /package/dist/core/{type-compatibility.d.ts → semantic/type-compatibility.d.ts} +0 -0
  526. /package/dist/core/{type-compatibility.js → semantic/type-compatibility.js} +0 -0
  527. /package/dist/core/{type-member-index.js → semantic/type-member-index.js} +0 -0
  528. /package/dist/core/{type-params.d.ts → semantic/type-params.d.ts} +0 -0
  529. /package/dist/core/{type-params.js → semantic/type-params.js} +0 -0
  530. /package/dist/core/{type-resolution.test.d.ts → semantic/type-resolution.test.d.ts} +0 -0
  531. /package/dist/core/{unsafe.d.ts → semantic/unsafe.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-analysis.d.ts","sourceRoot":"","sources":["../../../src/expressions/calls/call-analysis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,YAAY,KAAG,OAE7C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACrC,MAAM,YAAY,KACjB,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,SAYzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,YAAY,KACnB;IAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAA;CAAE,GAAG,IAc5C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,YAAY,KACnB;IAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAA;CAAE,GAAG,IAe5C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,EACrD,SAAS,cAAc,KACtB,OA4BF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,GACxC,aAAa,MAAM,EACnB,YAAY,MAAM,KACjB,OAqBF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,MAAM,GAAG,SAI5D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,OAoBrD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,MA+BpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,GAAG,SAAS,EACxB,SAAS,cAAc,KACtB,IAyBF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7C,YAAY,MAAM,KACjB,OA0BF,CAAC;AASF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,GAAG,SAAS,EACxB,UAAS,GAAG,CAAC,MAAM,CAAa,KAC/B,OAgBF,CAAC;AAIF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,OACnB,CAAC"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Call expression analysis and detection helpers
3
+ */
4
+ import { emitTypeAst } from "../../type-emitter.js";
5
+ import { renderTypeAst } from "../../core/format/backend-ast/utils.js";
6
+ import { containsTypeParameter } from "../../core/semantic/type-resolution.js";
7
+ /**
8
+ * Ref/out/in parameter handling:
9
+ * The frontend extracts parameter passing modes from resolved signatures
10
+ * and attaches them to IrCallExpression.argumentPassing array.
11
+ * The emitter reads this array and prefixes arguments with ref/out/in keywords.
12
+ */
13
+ /**
14
+ * Check if an expression is an lvalue (can be passed by reference)
15
+ * Only identifiers and member accesses are lvalues in C#
16
+ */
17
+ export const isLValue = (expr) => {
18
+ return expr.kind === "identifier" || expr.kind === "memberAccess";
19
+ };
20
+ /**
21
+ * Check if an expression has an `as out<T>`, `as ref<T>`, or `as inref<T>` cast.
22
+ * Returns the modifier ("out", "ref", "in") or undefined if not a passing modifier cast.
23
+ *
24
+ * When TypeScript code has `value as out<int>`, the frontend converts this to
25
+ * an expression with `inferredType: { kind: "referenceType", name: "out", ... }`.
26
+ */
27
+ export const getPassingModifierFromCast = (expr) => {
28
+ const inferredType = expr.inferredType;
29
+ if (!inferredType || inferredType.kind !== "referenceType") {
30
+ return undefined;
31
+ }
32
+ const typeName = inferredType.name;
33
+ if (typeName === "out")
34
+ return "out";
35
+ if (typeName === "ref")
36
+ return "ref";
37
+ if (typeName === "inref")
38
+ return "in"; // inref maps to C# 'in' keyword
39
+ return undefined;
40
+ };
41
+ /**
42
+ * Check if a member access expression targets System.Text.Json.JsonSerializer
43
+ */
44
+ export const isJsonSerializerCall = (callee) => {
45
+ if (callee.kind !== "memberAccess")
46
+ return null;
47
+ if (!callee.memberBinding)
48
+ return null;
49
+ const { type, member } = callee.memberBinding;
50
+ // Check if this is System.Text.Json.JsonSerializer
51
+ if (type !== "System.Text.Json.JsonSerializer")
52
+ return null;
53
+ // Check if the member is Serialize or Deserialize
54
+ if (member === "Serialize")
55
+ return { method: "Serialize" };
56
+ if (member === "Deserialize")
57
+ return { method: "Deserialize" };
58
+ return null;
59
+ };
60
+ /**
61
+ * Check if a call targets global JSON.stringify or JSON.parse
62
+ * These global JSON methods compile to JsonSerializer
63
+ */
64
+ export const isGlobalJsonCall = (callee) => {
65
+ if (callee.kind !== "memberAccess")
66
+ return null;
67
+ // Check if object is the global JSON identifier
68
+ const obj = callee.object;
69
+ if (obj.kind !== "identifier" || obj.name !== "JSON")
70
+ return null;
71
+ // Check property name
72
+ const prop = callee.property;
73
+ if (typeof prop !== "string")
74
+ return null;
75
+ if (prop === "stringify")
76
+ return { method: "Serialize" };
77
+ if (prop === "parse")
78
+ return { method: "Deserialize" };
79
+ return null;
80
+ };
81
+ /**
82
+ * Heuristic: Determine if a member access is an instance-style access (receiver.value)
83
+ * vs a static type reference (Type.Member).
84
+ *
85
+ * This mirrors the logic in emitMemberAccess; extension-method lowering only applies
86
+ * to instance-style member accesses.
87
+ */
88
+ export const isInstanceMemberAccess = (expr, context) => {
89
+ // Imported types (e.g., `Enumerable.Where(...)`) are static receiver expressions,
90
+ // even if TypeScript assigns them an inferredType.
91
+ if (expr.object.kind === "identifier") {
92
+ const importBinding = context.importBindings?.get(expr.object.name);
93
+ if (importBinding?.kind === "type") {
94
+ return false;
95
+ }
96
+ // If this isn't an import and we don't have a receiver type, default to instance.
97
+ // This matches emitMemberAccess's behavior and prevents local variables from being
98
+ // misclassified as static type receivers (which breaks extension method lowering).
99
+ if (!expr.object.inferredType) {
100
+ return true;
101
+ }
102
+ }
103
+ const objectType = expr.object.inferredType;
104
+ return (objectType?.kind === "referenceType" ||
105
+ objectType?.kind === "arrayType" ||
106
+ objectType?.kind === "intersectionType" ||
107
+ objectType?.kind === "unionType" ||
108
+ objectType?.kind === "primitiveType" ||
109
+ objectType?.kind === "literalType" ||
110
+ objectType?.kind === "typeParameterType" ||
111
+ objectType?.kind === "unknownType");
112
+ };
113
+ /**
114
+ * Whether to emit an extension method call using fluent instance syntax (receiver.Method(...))
115
+ * instead of explicit static invocation (Type.Method(receiver, ...)).
116
+ *
117
+ * Default: prefer static invocation to avoid relying on `using` directives and to avoid
118
+ * accidental binding to an instance member when a type has both an instance method and
119
+ * an extension method with the same name.
120
+ *
121
+ * Exception: certain toolchains (notably EF query precompilation) require the *syntax*
122
+ * of extension-method invocation so the analyzer can locate queries in user code.
123
+ */
124
+ export const shouldEmitFluentExtensionCall = (bindingType, memberName) => {
125
+ // EF Core query precompilation requires fluent/extension syntax specifically for Queryable.
126
+ // Keep Enumerable as explicit static invocation by default to avoid accidental binding to
127
+ // instance methods on custom enumerable types.
128
+ if (bindingType.startsWith("System.Linq.Queryable"))
129
+ return true;
130
+ // EF Core query operators (Include/ThenInclude/AsNoTracking/etc.)
131
+ if (bindingType.startsWith("Microsoft.EntityFrameworkCore."))
132
+ return true;
133
+ // EF Core query precompilation also requires fluent syntax for certain Enumerable terminal ops
134
+ // (e.g., IQueryable<T>.ToList()/ToArray()). When emitted as explicit static calls
135
+ // (Enumerable.ToList(query)), dotnet-ef may not generate interceptors, causing runtime failure
136
+ // under NativeAOT ("Query wasn't precompiled and dynamic code isn't supported").
137
+ if (bindingType.startsWith("System.Linq.Enumerable") &&
138
+ (memberName === "ToList" || memberName === "ToArray")) {
139
+ return true;
140
+ }
141
+ return false;
142
+ };
143
+ export const getTypeNamespace = (typeName) => {
144
+ const lastDot = typeName.lastIndexOf(".");
145
+ if (lastDot <= 0)
146
+ return undefined;
147
+ return typeName.slice(0, lastDot);
148
+ };
149
+ /**
150
+ * Whether a C# type string is a builtin/keyword type (optionally nullable).
151
+ *
152
+ * These must NOT be qualified with a namespace (e.g. `object`, not `MyNs.object`).
153
+ */
154
+ export const isCSharpBuiltinType = (typeStr) => {
155
+ const base = typeStr.endsWith("?") ? typeStr.slice(0, -1) : typeStr;
156
+ return (base === "string" ||
157
+ base === "int" ||
158
+ base === "long" ||
159
+ base === "short" ||
160
+ base === "byte" ||
161
+ base === "sbyte" ||
162
+ base === "uint" ||
163
+ base === "ulong" ||
164
+ base === "ushort" ||
165
+ base === "float" ||
166
+ base === "double" ||
167
+ base === "decimal" ||
168
+ base === "bool" ||
169
+ base === "char" ||
170
+ base === "object" ||
171
+ base === "void");
172
+ };
173
+ /**
174
+ * Ensure a C# type string has global:: prefix for unambiguous resolution
175
+ */
176
+ export const ensureGlobalPrefix = (typeStr) => {
177
+ // Skip already-prefixed types
178
+ if (typeStr.startsWith("global::")) {
179
+ return typeStr;
180
+ }
181
+ // Handle pointer types (T*). `global::int*` is invalid; qualify the element type only.
182
+ if (typeStr.endsWith("*")) {
183
+ const inner = typeStr.slice(0, -1);
184
+ return `${ensureGlobalPrefix(inner)}*`;
185
+ }
186
+ // Handle arrays (T[], T[,], jagged arrays, ...). `global::string[]` is invalid; qualify
187
+ // the element type only.
188
+ const arrayMatch = /(\[[,\s]*\])$/.exec(typeStr);
189
+ if (arrayMatch) {
190
+ const suffix = arrayMatch[1];
191
+ if (!suffix)
192
+ return typeStr;
193
+ const inner = typeStr.slice(0, -suffix.length);
194
+ return `${ensureGlobalPrefix(inner)}${suffix}`;
195
+ }
196
+ // Skip primitives (and other builtin keyword types) after handling suffix forms.
197
+ if (isCSharpBuiltinType(typeStr)) {
198
+ return typeStr;
199
+ }
200
+ // Handle generic types: List<Foo> -> global::List<global::Foo>
201
+ // For now, just add prefix to the outer type
202
+ // The inner types should already be handled by emitType
203
+ return `global::${typeStr}`;
204
+ };
205
+ /**
206
+ * Register a type with the JSON AOT registry.
207
+ * Ensures types are fully qualified with namespace for the AOT source generator.
208
+ */
209
+ export const registerJsonAotType = (type, context) => {
210
+ if (!type)
211
+ return;
212
+ if (!context.options.jsonAotRegistry)
213
+ return;
214
+ // NativeAOT JSON source generation requires CLOSED types.
215
+ // If the type contains any generic parameters in the current scope (T, U, ...),
216
+ // we cannot emit `[JsonSerializable(typeof(T))]` because `T` is not in scope in the
217
+ // generated context class. Skip registration to keep emission valid.
218
+ if (containsTypeParameter(type)) {
219
+ context.options.jsonAotRegistry.needsJsonAot = true;
220
+ return;
221
+ }
222
+ const registry = context.options.jsonAotRegistry;
223
+ const [rawTypeAst] = emitTypeAst(type, {
224
+ ...context,
225
+ qualifyLocalTypes: true,
226
+ });
227
+ const rawTypeStr = renderTypeAst(rawTypeAst);
228
+ const typeStr = rawTypeStr.endsWith("?")
229
+ ? rawTypeStr.slice(0, -1)
230
+ : rawTypeStr;
231
+ registry.rootTypes.add(ensureGlobalPrefix(typeStr));
232
+ registry.needsJsonAot = true;
233
+ };
234
+ /**
235
+ * Check if a call expression needs an explicit cast because the inferred type
236
+ * differs from the C# return type. This handles cases like Math.floor() which
237
+ * returns double in C# but is cast to int in TypeScript via `as int`.
238
+ */
239
+ export const needsIntCast = (expr, calleeName) => {
240
+ // Check if the inferred type is int (a reference type from @tsonic/core)
241
+ const inferredType = expr.inferredType;
242
+ if (!inferredType ||
243
+ inferredType.kind !== "referenceType" ||
244
+ inferredType.name !== "int") {
245
+ return false;
246
+ }
247
+ // Check if this is a Math method that returns double
248
+ const mathMethodsReturningDouble = [
249
+ "Math.floor",
250
+ "Math.ceil",
251
+ "Math.round",
252
+ "Math.abs",
253
+ "Math.pow",
254
+ "Math.sqrt",
255
+ "Math.min",
256
+ "Math.max",
257
+ ];
258
+ return mathMethodsReturningDouble.some((m) => calleeName === m || calleeName.endsWith(`.${m.split(".").pop()}`));
259
+ };
260
+ const ASYNC_WRAPPER_NAMES = new Set([
261
+ "Promise",
262
+ "PromiseLike",
263
+ "Task",
264
+ "ValueTask",
265
+ ]);
266
+ export const isAsyncWrapperType = (type, visited = new Set()) => {
267
+ if (!type || visited.has(type))
268
+ return false;
269
+ visited.add(type);
270
+ if (type.kind === "referenceType") {
271
+ const simple = type.name.includes(".")
272
+ ? type.name.slice(type.name.lastIndexOf(".") + 1)
273
+ : type.name;
274
+ if (ASYNC_WRAPPER_NAMES.has(simple))
275
+ return true;
276
+ }
277
+ if (type.kind === "unionType" || type.kind === "intersectionType") {
278
+ return type.types.some((t) => isAsyncWrapperType(t, visited));
279
+ }
280
+ return false;
281
+ };
282
+ const PROMISE_CHAIN_METHODS = new Set(["then", "catch", "finally"]);
283
+ export const isPromiseChainMethod = (name) => PROMISE_CHAIN_METHODS.has(name);
284
+ //# sourceMappingURL=call-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-analysis.js","sourceRoot":"","sources":["../../../src/expressions/calls/call-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Call expression emitter
3
+ */
4
+ import { IrExpression } from "@tsonic/frontend";
5
+ import { EmitterContext } from "../../types.js";
6
+ import type { CSharpExpressionAst } from "../../core/format/backend-ast/types.js";
7
+ /**
8
+ * Emit a function call expression as CSharpExpressionAst
9
+ */
10
+ export declare const emitCall: (expr: Extract<IrExpression, {
11
+ kind: "call";
12
+ }>, context: EmitterContext) => [CSharpExpressionAst, EmitterContext];
13
+ //# sourceMappingURL=call-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-emitter.d.ts","sourceRoot":"","sources":["../../../src/expressions/calls/call-emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAU,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAsBhD,OAAO,KAAK,EAGV,mBAAmB,EAGpB,MAAM,wCAAwC,CAAC;AAqzBhD;;GAEG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7C,SAAS,cAAc,KACtB,CAAC,mBAAmB,EAAE,cAAc,CAgStC,CAAC"}