@tsonic/emitter 0.0.1 → 0.0.2

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 (712) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/adapter-generator.d.ts +28 -0
  3. package/dist/adapter-generator.d.ts.map +1 -0
  4. package/dist/adapter-generator.js +83 -0
  5. package/dist/adapter-generator.js.map +1 -0
  6. package/dist/array.test.d.ts +6 -0
  7. package/dist/array.test.d.ts.map +1 -0
  8. package/dist/array.test.js +274 -0
  9. package/dist/array.test.js.map +1 -0
  10. package/dist/async-investigation.test.d.ts +5 -0
  11. package/dist/async-investigation.test.d.ts.map +1 -0
  12. package/dist/async-investigation.test.js +239 -0
  13. package/dist/async-investigation.test.js.map +1 -0
  14. package/dist/constants.d.ts +15 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +22 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/core/exports.d.ts +10 -0
  19. package/dist/core/exports.d.ts.map +1 -0
  20. package/dist/core/exports.js +28 -0
  21. package/dist/core/exports.js.map +1 -0
  22. package/dist/core/imports.d.ts +26 -0
  23. package/dist/core/imports.d.ts.map +1 -0
  24. package/dist/core/imports.js +189 -0
  25. package/dist/core/imports.js.map +1 -0
  26. package/dist/core/imports.test.d.ts +6 -0
  27. package/dist/core/imports.test.d.ts.map +1 -0
  28. package/dist/core/imports.test.js +76 -0
  29. package/dist/core/imports.test.js.map +1 -0
  30. package/dist/core/index.d.ts +9 -0
  31. package/dist/core/index.d.ts.map +1 -0
  32. package/{src/core/index.ts → dist/core/index.js} +1 -1
  33. package/dist/core/index.js.map +1 -0
  34. package/dist/core/module-emitter/assembly.d.ts +21 -0
  35. package/dist/core/module-emitter/assembly.d.ts.map +1 -0
  36. package/dist/core/module-emitter/assembly.js +58 -0
  37. package/dist/core/module-emitter/assembly.js.map +1 -0
  38. package/dist/core/module-emitter/header.d.ts +10 -0
  39. package/dist/core/module-emitter/header.d.ts.map +1 -0
  40. package/dist/core/module-emitter/header.js +13 -0
  41. package/dist/core/module-emitter/header.js.map +1 -0
  42. package/{src/core/module-emitter/index.ts → dist/core/module-emitter/index.d.ts} +3 -10
  43. package/dist/core/module-emitter/index.d.ts.map +1 -0
  44. package/dist/core/module-emitter/index.js +10 -0
  45. package/dist/core/module-emitter/index.js.map +1 -0
  46. package/dist/core/module-emitter/namespace.d.ts +14 -0
  47. package/dist/core/module-emitter/namespace.d.ts.map +1 -0
  48. package/dist/core/module-emitter/namespace.js +26 -0
  49. package/dist/core/module-emitter/namespace.js.map +1 -0
  50. package/dist/core/module-emitter/orchestrator.d.ts +10 -0
  51. package/dist/core/module-emitter/orchestrator.d.ts.map +1 -0
  52. package/dist/core/module-emitter/orchestrator.js +58 -0
  53. package/dist/core/module-emitter/orchestrator.js.map +1 -0
  54. package/dist/core/module-emitter/separation.d.ts +14 -0
  55. package/dist/core/module-emitter/separation.d.ts.map +1 -0
  56. package/dist/core/module-emitter/separation.js +27 -0
  57. package/dist/core/module-emitter/separation.js.map +1 -0
  58. package/dist/core/module-emitter/static-container.d.ts +18 -0
  59. package/dist/core/module-emitter/static-container.d.ts.map +1 -0
  60. package/dist/core/module-emitter/static-container.js +49 -0
  61. package/dist/core/module-emitter/static-container.js.map +1 -0
  62. package/dist/core/module-emitter.d.ts +6 -0
  63. package/dist/core/module-emitter.d.ts.map +1 -0
  64. package/{src/core/module-emitter.ts → dist/core/module-emitter.js} +1 -1
  65. package/dist/core/module-emitter.js.map +1 -0
  66. package/dist/core/module-emitter.test.d.ts +6 -0
  67. package/dist/core/module-emitter.test.d.ts.map +1 -0
  68. package/dist/core/module-emitter.test.js +147 -0
  69. package/dist/core/module-emitter.test.js.map +1 -0
  70. package/dist/core/module-map.d.ts +35 -0
  71. package/dist/core/module-map.d.ts.map +1 -0
  72. package/dist/core/module-map.js +170 -0
  73. package/dist/core/module-map.js.map +1 -0
  74. package/dist/core/options.d.ts +9 -0
  75. package/dist/core/options.d.ts.map +1 -0
  76. package/dist/core/options.js +14 -0
  77. package/dist/core/options.js.map +1 -0
  78. package/dist/core/type-params.d.ts +9 -0
  79. package/dist/core/type-params.d.ts.map +1 -0
  80. package/dist/core/type-params.js +31 -0
  81. package/dist/core/type-params.js.map +1 -0
  82. package/dist/emitter-types/context.d.ts +29 -0
  83. package/dist/emitter-types/context.d.ts.map +1 -0
  84. package/dist/emitter-types/context.js +68 -0
  85. package/dist/emitter-types/context.js.map +1 -0
  86. package/dist/emitter-types/core.d.ts +129 -0
  87. package/dist/emitter-types/core.d.ts.map +1 -0
  88. package/dist/emitter-types/core.js +5 -0
  89. package/dist/emitter-types/core.js.map +1 -0
  90. package/dist/emitter-types/csharp-types.d.ts +27 -0
  91. package/dist/emitter-types/csharp-types.d.ts.map +1 -0
  92. package/dist/emitter-types/csharp-types.js +5 -0
  93. package/dist/emitter-types/csharp-types.js.map +1 -0
  94. package/dist/emitter-types/formatting.d.ts +9 -0
  95. package/dist/emitter-types/formatting.d.ts.map +1 -0
  96. package/dist/emitter-types/formatting.js +11 -0
  97. package/dist/emitter-types/formatting.js.map +1 -0
  98. package/dist/emitter-types/fqn.d.ts +53 -0
  99. package/dist/emitter-types/fqn.d.ts.map +1 -0
  100. package/dist/emitter-types/fqn.js +65 -0
  101. package/dist/emitter-types/fqn.js.map +1 -0
  102. package/dist/emitter-types/index.d.ts +9 -0
  103. package/dist/emitter-types/index.d.ts.map +1 -0
  104. package/dist/emitter-types/index.js +7 -0
  105. package/dist/emitter-types/index.js.map +1 -0
  106. package/dist/emitter.d.ts +27 -0
  107. package/dist/emitter.d.ts.map +1 -0
  108. package/dist/emitter.js +80 -0
  109. package/dist/emitter.js.map +1 -0
  110. package/dist/expression-emitter.d.ts +15 -0
  111. package/dist/expression-emitter.d.ts.map +1 -0
  112. package/dist/expression-emitter.js +67 -0
  113. package/dist/expression-emitter.js.map +1 -0
  114. package/dist/expressions/access.d.ts +12 -0
  115. package/dist/expressions/access.d.ts.map +1 -0
  116. package/dist/expressions/access.js +77 -0
  117. package/dist/expressions/access.js.map +1 -0
  118. package/dist/expressions/calls.d.ts +18 -0
  119. package/dist/expressions/calls.d.ts.map +1 -0
  120. package/dist/expressions/calls.js +207 -0
  121. package/dist/expressions/calls.js.map +1 -0
  122. package/dist/expressions/collections.d.ts +24 -0
  123. package/dist/expressions/collections.d.ts.map +1 -0
  124. package/dist/expressions/collections.js +254 -0
  125. package/dist/expressions/collections.js.map +1 -0
  126. package/dist/expressions/functions.d.ts +18 -0
  127. package/dist/expressions/functions.d.ts.map +1 -0
  128. package/dist/expressions/functions.js +60 -0
  129. package/dist/expressions/functions.js.map +1 -0
  130. package/dist/expressions/identifiers.d.ts +22 -0
  131. package/dist/expressions/identifiers.d.ts.map +1 -0
  132. package/dist/expressions/identifiers.js +99 -0
  133. package/dist/expressions/identifiers.js.map +1 -0
  134. package/dist/expressions/index.d.ts +12 -0
  135. package/dist/expressions/index.d.ts.map +1 -0
  136. package/{src/expressions/index.ts → dist/expressions/index.js} +3 -21
  137. package/dist/expressions/index.js.map +1 -0
  138. package/dist/expressions/index.test.d.ts +6 -0
  139. package/dist/expressions/index.test.d.ts.map +1 -0
  140. package/dist/expressions/index.test.js +480 -0
  141. package/dist/expressions/index.test.js.map +1 -0
  142. package/dist/expressions/literals.d.ts +31 -0
  143. package/dist/expressions/literals.d.ts.map +1 -0
  144. package/dist/expressions/literals.js +116 -0
  145. package/dist/expressions/literals.js.map +1 -0
  146. package/dist/expressions/operators.d.ts +52 -0
  147. package/dist/expressions/operators.d.ts.map +1 -0
  148. package/dist/expressions/operators.js +166 -0
  149. package/dist/expressions/operators.js.map +1 -0
  150. package/dist/expressions/other.d.ts +24 -0
  151. package/dist/expressions/other.d.ts.map +1 -0
  152. package/dist/expressions/other.js +43 -0
  153. package/dist/expressions/other.js.map +1 -0
  154. package/dist/generator-exchange.d.ts +11 -0
  155. package/dist/generator-exchange.d.ts.map +1 -0
  156. package/dist/generator-exchange.js +92 -0
  157. package/dist/generator-exchange.js.map +1 -0
  158. package/dist/generator.test.d.ts +6 -0
  159. package/dist/generator.test.d.ts.map +1 -0
  160. package/dist/generator.test.js +177 -0
  161. package/dist/generator.test.js.map +1 -0
  162. package/dist/golden-tests/config-parser.d.ts +9 -0
  163. package/dist/golden-tests/config-parser.d.ts.map +1 -0
  164. package/dist/golden-tests/config-parser.js +57 -0
  165. package/dist/golden-tests/config-parser.js.map +1 -0
  166. package/dist/golden-tests/discovery.d.ts +9 -0
  167. package/dist/golden-tests/discovery.d.ts.map +1 -0
  168. package/dist/golden-tests/discovery.js +51 -0
  169. package/dist/golden-tests/discovery.js.map +1 -0
  170. package/{src/golden-tests/index.ts → dist/golden-tests/index.d.ts} +1 -1
  171. package/dist/golden-tests/index.d.ts.map +1 -0
  172. package/dist/golden-tests/index.js +9 -0
  173. package/dist/golden-tests/index.js.map +1 -0
  174. package/dist/golden-tests/registration.d.ts +9 -0
  175. package/dist/golden-tests/registration.d.ts.map +1 -0
  176. package/dist/golden-tests/registration.js +23 -0
  177. package/dist/golden-tests/registration.js.map +1 -0
  178. package/dist/golden-tests/runner.d.ts +13 -0
  179. package/dist/golden-tests/runner.d.ts.map +1 -0
  180. package/dist/golden-tests/runner.js +99 -0
  181. package/dist/golden-tests/runner.js.map +1 -0
  182. package/dist/golden-tests/tree-builder.d.ts +9 -0
  183. package/dist/golden-tests/tree-builder.d.ts.map +1 -0
  184. package/dist/golden-tests/tree-builder.js +35 -0
  185. package/dist/golden-tests/tree-builder.js.map +1 -0
  186. package/dist/golden-tests/types.d.ts +19 -0
  187. package/dist/golden-tests/types.d.ts.map +1 -0
  188. package/dist/golden-tests/types.js +5 -0
  189. package/dist/golden-tests/types.js.map +1 -0
  190. package/dist/golden.test.d.ts +11 -0
  191. package/dist/golden.test.d.ts.map +1 -0
  192. package/{src/golden.test.ts → dist/golden.test.js} +15 -20
  193. package/dist/golden.test.js.map +1 -0
  194. package/dist/hierarchical-bindings.test.d.ts +6 -0
  195. package/dist/hierarchical-bindings.test.d.ts.map +1 -0
  196. package/dist/hierarchical-bindings.test.js +194 -0
  197. package/dist/hierarchical-bindings.test.js.map +1 -0
  198. package/dist/index.d.ts +9 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/{src/index.ts → dist/index.js} +2 -7
  201. package/dist/index.js.map +1 -0
  202. package/dist/integration.test.d.ts +6 -0
  203. package/dist/integration.test.d.ts.map +1 -0
  204. package/dist/integration.test.js +234 -0
  205. package/dist/integration.test.js.map +1 -0
  206. package/dist/specialization/call-site-rewriting.test.d.ts +6 -0
  207. package/dist/specialization/call-site-rewriting.test.d.ts.map +1 -0
  208. package/dist/specialization/call-site-rewriting.test.js +92 -0
  209. package/dist/specialization/call-site-rewriting.test.js.map +1 -0
  210. package/dist/specialization/collection/expressions.d.ts +10 -0
  211. package/dist/specialization/collection/expressions.d.ts.map +1 -0
  212. package/dist/specialization/collection/expressions.js +142 -0
  213. package/dist/specialization/collection/expressions.js.map +1 -0
  214. package/dist/specialization/collection/index.d.ts +7 -0
  215. package/dist/specialization/collection/index.d.ts.map +1 -0
  216. package/{src/specialization/collection/index.ts → dist/specialization/collection/index.js} +1 -1
  217. package/dist/specialization/collection/index.js.map +1 -0
  218. package/dist/specialization/collection/orchestrator.d.ts +11 -0
  219. package/dist/specialization/collection/orchestrator.d.ts.map +1 -0
  220. package/dist/specialization/collection/orchestrator.js +18 -0
  221. package/dist/specialization/collection/orchestrator.js.map +1 -0
  222. package/dist/specialization/collection/statements.d.ts +10 -0
  223. package/dist/specialization/collection/statements.d.ts.map +1 -0
  224. package/dist/specialization/collection/statements.js +75 -0
  225. package/dist/specialization/collection/statements.js.map +1 -0
  226. package/dist/specialization/collection.d.ts +6 -0
  227. package/dist/specialization/collection.d.ts.map +1 -0
  228. package/dist/specialization/collection.js +6 -0
  229. package/dist/specialization/collection.js.map +1 -0
  230. package/dist/specialization/generation.d.ts +11 -0
  231. package/dist/specialization/generation.d.ts.map +1 -0
  232. package/dist/specialization/generation.js +137 -0
  233. package/dist/specialization/generation.js.map +1 -0
  234. package/dist/specialization/generic-classes.test.d.ts +6 -0
  235. package/dist/specialization/generic-classes.test.d.ts.map +1 -0
  236. package/dist/specialization/generic-classes.test.js +55 -0
  237. package/dist/specialization/generic-classes.test.js.map +1 -0
  238. package/dist/specialization/generic-functions.test.d.ts +6 -0
  239. package/dist/specialization/generic-functions.test.d.ts.map +1 -0
  240. package/dist/specialization/generic-functions.test.js +275 -0
  241. package/dist/specialization/generic-functions.test.js.map +1 -0
  242. package/dist/specialization/helpers.d.ts +13 -0
  243. package/dist/specialization/helpers.d.ts.map +1 -0
  244. package/dist/specialization/helpers.js +33 -0
  245. package/dist/specialization/helpers.js.map +1 -0
  246. package/dist/specialization/index.d.ts +10 -0
  247. package/dist/specialization/index.d.ts.map +1 -0
  248. package/{src/specialization/index.ts → dist/specialization/index.js} +3 -17
  249. package/dist/specialization/index.js.map +1 -0
  250. package/dist/specialization/interfaces.test.d.ts +6 -0
  251. package/dist/specialization/interfaces.test.d.ts.map +1 -0
  252. package/dist/specialization/interfaces.test.js +139 -0
  253. package/dist/specialization/interfaces.test.js.map +1 -0
  254. package/dist/specialization/naming.d.ts +13 -0
  255. package/dist/specialization/naming.d.ts.map +1 -0
  256. package/dist/specialization/naming.js +25 -0
  257. package/dist/specialization/naming.js.map +1 -0
  258. package/dist/specialization/substitution.d.ts +17 -0
  259. package/dist/specialization/substitution.d.ts.map +1 -0
  260. package/dist/specialization/substitution.js +150 -0
  261. package/dist/specialization/substitution.js.map +1 -0
  262. package/dist/specialization/type-aliases.test.d.ts +6 -0
  263. package/dist/specialization/type-aliases.test.d.ts.map +1 -0
  264. package/dist/specialization/type-aliases.test.js +124 -0
  265. package/dist/specialization/type-aliases.test.js.map +1 -0
  266. package/dist/specialization/types.d.ts +14 -0
  267. package/dist/specialization/types.d.ts.map +1 -0
  268. package/dist/specialization/types.js +5 -0
  269. package/dist/specialization/types.js.map +1 -0
  270. package/{src/specialization-generator.ts → dist/specialization-generator.d.ts} +4 -15
  271. package/dist/specialization-generator.d.ts.map +1 -0
  272. package/dist/specialization-generator.js +11 -0
  273. package/dist/specialization-generator.js.map +1 -0
  274. package/dist/statement-emitter.d.ts +13 -0
  275. package/dist/statement-emitter.d.ts.map +1 -0
  276. package/dist/statement-emitter.js +67 -0
  277. package/dist/statement-emitter.js.map +1 -0
  278. package/dist/statements/blocks.d.ts +40 -0
  279. package/dist/statements/blocks.d.ts.map +1 -0
  280. package/dist/statements/blocks.js +86 -0
  281. package/dist/statements/blocks.js.map +1 -0
  282. package/{src/statements/classes/helpers.ts → dist/statements/classes/helpers.d.ts} +2 -3
  283. package/dist/statements/classes/helpers.d.ts.map +1 -0
  284. package/dist/statements/classes/helpers.js +8 -0
  285. package/dist/statements/classes/helpers.js.map +1 -0
  286. package/dist/statements/classes/index.d.ts +9 -0
  287. package/dist/statements/classes/index.d.ts.map +1 -0
  288. package/{src/statements/classes/index.ts → dist/statements/classes/index.js} +2 -6
  289. package/dist/statements/classes/index.js.map +1 -0
  290. package/dist/statements/classes/inline-types.d.ts +21 -0
  291. package/dist/statements/classes/inline-types.d.ts.map +1 -0
  292. package/dist/statements/classes/inline-types.js +50 -0
  293. package/dist/statements/classes/inline-types.js.map +1 -0
  294. package/dist/statements/classes/members/constructors.d.ts +12 -0
  295. package/dist/statements/classes/members/constructors.d.ts.map +1 -0
  296. package/dist/statements/classes/members/constructors.js +90 -0
  297. package/dist/statements/classes/members/constructors.js.map +1 -0
  298. package/dist/statements/classes/members/index.d.ts +8 -0
  299. package/dist/statements/classes/members/index.d.ts.map +1 -0
  300. package/{src/statements/classes/members/index.ts → dist/statements/classes/members/index.js} +1 -1
  301. package/dist/statements/classes/members/index.js.map +1 -0
  302. package/dist/statements/classes/members/methods.d.ts +12 -0
  303. package/dist/statements/classes/members/methods.d.ts.map +1 -0
  304. package/dist/statements/classes/members/methods.js +100 -0
  305. package/dist/statements/classes/members/methods.js.map +1 -0
  306. package/dist/statements/classes/members/orchestrator.d.ts +10 -0
  307. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -0
  308. package/dist/statements/classes/members/orchestrator.js +24 -0
  309. package/dist/statements/classes/members/orchestrator.js.map +1 -0
  310. package/dist/statements/classes/members/properties.d.ts +12 -0
  311. package/dist/statements/classes/members/properties.d.ts.map +1 -0
  312. package/dist/statements/classes/members/properties.js +48 -0
  313. package/dist/statements/classes/members/properties.js.map +1 -0
  314. package/dist/statements/classes/members.d.ts +6 -0
  315. package/dist/statements/classes/members.d.ts.map +1 -0
  316. package/{src/statements/classes/members.ts → dist/statements/classes/members.js} +1 -1
  317. package/dist/statements/classes/members.js.map +1 -0
  318. package/dist/statements/classes/parameters.d.ts +10 -0
  319. package/dist/statements/classes/parameters.d.ts.map +1 -0
  320. package/dist/statements/classes/parameters.js +50 -0
  321. package/dist/statements/classes/parameters.js.map +1 -0
  322. package/dist/statements/classes/properties.d.ts +11 -0
  323. package/dist/statements/classes/properties.d.ts.map +1 -0
  324. package/dist/statements/classes/properties.js +74 -0
  325. package/dist/statements/classes/properties.js.map +1 -0
  326. package/dist/statements/classes.d.ts +6 -0
  327. package/dist/statements/classes.d.ts.map +1 -0
  328. package/dist/statements/classes.js +6 -0
  329. package/dist/statements/classes.js.map +1 -0
  330. package/dist/statements/control/conditionals.d.ts +18 -0
  331. package/dist/statements/control/conditionals.d.ts.map +1 -0
  332. package/dist/statements/control/conditionals.js +98 -0
  333. package/dist/statements/control/conditionals.js.map +1 -0
  334. package/dist/statements/control/exceptions.d.ts +18 -0
  335. package/dist/statements/control/exceptions.d.ts.map +1 -0
  336. package/dist/statements/control/exceptions.js +38 -0
  337. package/dist/statements/control/exceptions.js.map +1 -0
  338. package/dist/statements/control/index.d.ts +7 -0
  339. package/dist/statements/control/index.d.ts.map +1 -0
  340. package/{src/statements/control/index.ts → dist/statements/control/index.js} +2 -6
  341. package/dist/statements/control/index.js.map +1 -0
  342. package/dist/statements/control/loops.d.ts +29 -0
  343. package/dist/statements/control/loops.d.ts.map +1 -0
  344. package/dist/statements/control/loops.js +186 -0
  345. package/dist/statements/control/loops.js.map +1 -0
  346. package/dist/statements/control.d.ts +6 -0
  347. package/dist/statements/control.d.ts.map +1 -0
  348. package/dist/statements/control.js +6 -0
  349. package/dist/statements/control.js.map +1 -0
  350. package/dist/statements/declarations/classes.d.ts +12 -0
  351. package/dist/statements/declarations/classes.d.ts.map +1 -0
  352. package/dist/statements/declarations/classes.js +61 -0
  353. package/dist/statements/declarations/classes.js.map +1 -0
  354. package/dist/statements/declarations/enums.d.ts +12 -0
  355. package/dist/statements/declarations/enums.d.ts.map +1 -0
  356. package/dist/statements/declarations/enums.js +25 -0
  357. package/dist/statements/declarations/enums.js.map +1 -0
  358. package/dist/statements/declarations/functions.d.ts +12 -0
  359. package/dist/statements/declarations/functions.d.ts.map +1 -0
  360. package/dist/statements/declarations/functions.js +110 -0
  361. package/dist/statements/declarations/functions.js.map +1 -0
  362. package/dist/statements/declarations/index.d.ts +10 -0
  363. package/dist/statements/declarations/index.d.ts.map +1 -0
  364. package/{src/statements/declarations/index.ts → dist/statements/declarations/index.js} +1 -1
  365. package/dist/statements/declarations/index.js.map +1 -0
  366. package/dist/statements/declarations/interfaces.d.ts +12 -0
  367. package/dist/statements/declarations/interfaces.d.ts.map +1 -0
  368. package/dist/statements/declarations/interfaces.js +85 -0
  369. package/dist/statements/declarations/interfaces.js.map +1 -0
  370. package/dist/statements/declarations/structs.test.d.ts +5 -0
  371. package/dist/statements/declarations/structs.test.d.ts.map +1 -0
  372. package/dist/statements/declarations/structs.test.js +165 -0
  373. package/dist/statements/declarations/structs.test.js.map +1 -0
  374. package/dist/statements/declarations/type-aliases.d.ts +12 -0
  375. package/dist/statements/declarations/type-aliases.d.ts.map +1 -0
  376. package/dist/statements/declarations/type-aliases.js +80 -0
  377. package/dist/statements/declarations/type-aliases.js.map +1 -0
  378. package/dist/statements/declarations/variables.d.ts +12 -0
  379. package/dist/statements/declarations/variables.d.ts.map +1 -0
  380. package/dist/statements/declarations/variables.js +120 -0
  381. package/dist/statements/declarations/variables.js.map +1 -0
  382. package/dist/statements/declarations.d.ts +6 -0
  383. package/dist/statements/declarations.d.ts.map +1 -0
  384. package/dist/statements/declarations.js +6 -0
  385. package/dist/statements/declarations.js.map +1 -0
  386. package/dist/statements/index.d.ts +8 -0
  387. package/dist/statements/index.d.ts.map +1 -0
  388. package/dist/statements/index.js +12 -0
  389. package/dist/statements/index.js.map +1 -0
  390. package/dist/statements/index.test.d.ts +6 -0
  391. package/dist/statements/index.test.d.ts.map +1 -0
  392. package/dist/statements/index.test.js +248 -0
  393. package/dist/statements/index.test.js.map +1 -0
  394. package/dist/tests/emitter/expression-emission.test.d.ts +6 -0
  395. package/dist/tests/emitter/expression-emission.test.d.ts.map +1 -0
  396. package/dist/tests/emitter/expression-emission.test.js +322 -0
  397. package/dist/tests/emitter/expression-emission.test.js.map +1 -0
  398. package/dist/tests/emitter/import-handling.test.d.ts +6 -0
  399. package/dist/tests/emitter/import-handling.test.d.ts.map +1 -0
  400. package/dist/tests/emitter/import-handling.test.js +76 -0
  401. package/dist/tests/emitter/import-handling.test.js.map +1 -0
  402. package/dist/tests/emitter/module-generation.test.d.ts +6 -0
  403. package/dist/tests/emitter/module-generation.test.d.ts.map +1 -0
  404. package/dist/tests/emitter/module-generation.test.js +147 -0
  405. package/dist/tests/emitter/module-generation.test.js.map +1 -0
  406. package/dist/tests/emitter/statement-emission.test.d.ts +6 -0
  407. package/dist/tests/emitter/statement-emission.test.d.ts.map +1 -0
  408. package/dist/tests/emitter/statement-emission.test.js +138 -0
  409. package/dist/tests/emitter/statement-emission.test.js.map +1 -0
  410. package/dist/tests/emitter/type-emission.test.d.ts +6 -0
  411. package/dist/tests/emitter/type-emission.test.d.ts.map +1 -0
  412. package/dist/tests/emitter/type-emission.test.js +109 -0
  413. package/dist/tests/emitter/type-emission.test.js.map +1 -0
  414. package/dist/tests/generics/call-site-rewriting.test.d.ts +6 -0
  415. package/dist/tests/generics/call-site-rewriting.test.d.ts.map +1 -0
  416. package/dist/tests/generics/call-site-rewriting.test.js +92 -0
  417. package/dist/tests/generics/call-site-rewriting.test.js.map +1 -0
  418. package/dist/tests/generics/generic-classes.test.d.ts +6 -0
  419. package/dist/tests/generics/generic-classes.test.d.ts.map +1 -0
  420. package/dist/tests/generics/generic-classes.test.js +55 -0
  421. package/dist/tests/generics/generic-classes.test.js.map +1 -0
  422. package/dist/tests/generics/generic-functions.test.d.ts +6 -0
  423. package/dist/tests/generics/generic-functions.test.d.ts.map +1 -0
  424. package/dist/tests/generics/generic-functions.test.js +275 -0
  425. package/dist/tests/generics/generic-functions.test.js.map +1 -0
  426. package/dist/tests/generics/interfaces.test.d.ts +6 -0
  427. package/dist/tests/generics/interfaces.test.d.ts.map +1 -0
  428. package/dist/tests/generics/interfaces.test.js +139 -0
  429. package/dist/tests/generics/interfaces.test.js.map +1 -0
  430. package/dist/tests/generics/type-aliases.test.d.ts +6 -0
  431. package/dist/tests/generics/type-aliases.test.d.ts.map +1 -0
  432. package/dist/tests/generics/type-aliases.test.js +124 -0
  433. package/dist/tests/generics/type-aliases.test.js.map +1 -0
  434. package/dist/tests/hierarchical-bindings-full-pipeline.test.d.ts +6 -0
  435. package/dist/tests/hierarchical-bindings-full-pipeline.test.d.ts.map +1 -0
  436. package/dist/tests/hierarchical-bindings-full-pipeline.test.js +202 -0
  437. package/dist/tests/hierarchical-bindings-full-pipeline.test.js.map +1 -0
  438. package/dist/tests/ref-out-parameters.test.d.ts +5 -0
  439. package/dist/tests/ref-out-parameters.test.d.ts.map +1 -0
  440. package/dist/tests/ref-out-parameters.test.js +136 -0
  441. package/dist/tests/ref-out-parameters.test.js.map +1 -0
  442. package/dist/tests/structs/struct-emission.test.d.ts +5 -0
  443. package/dist/tests/structs/struct-emission.test.d.ts.map +1 -0
  444. package/dist/tests/structs/struct-emission.test.js +165 -0
  445. package/dist/tests/structs/struct-emission.test.js.map +1 -0
  446. package/dist/type-assertion.test.d.ts +6 -0
  447. package/dist/type-assertion.test.d.ts.map +1 -0
  448. package/dist/type-assertion.test.js +133 -0
  449. package/dist/type-assertion.test.js.map +1 -0
  450. package/dist/type-emitter.d.ts +6 -0
  451. package/dist/type-emitter.d.ts.map +1 -0
  452. package/dist/type-emitter.js +6 -0
  453. package/dist/type-emitter.js.map +1 -0
  454. package/dist/types/arrays.d.ts +12 -0
  455. package/dist/types/arrays.d.ts.map +1 -0
  456. package/dist/types/arrays.js +15 -0
  457. package/dist/types/arrays.js.map +1 -0
  458. package/dist/types/dictionaries.d.ts +17 -0
  459. package/dist/types/dictionaries.d.ts.map +1 -0
  460. package/dist/types/dictionaries.js +37 -0
  461. package/dist/types/dictionaries.js.map +1 -0
  462. package/dist/types/emitter.d.ts +10 -0
  463. package/dist/types/emitter.d.ts.map +1 -0
  464. package/dist/types/emitter.js +53 -0
  465. package/dist/types/emitter.js.map +1 -0
  466. package/dist/types/functions.d.ts +12 -0
  467. package/dist/types/functions.d.ts.map +1 -0
  468. package/dist/types/functions.js +34 -0
  469. package/dist/types/functions.js.map +1 -0
  470. package/dist/types/index.d.ts +14 -0
  471. package/dist/types/index.d.ts.map +1 -0
  472. package/{src/types/index.ts → dist/types/index.js} +1 -1
  473. package/dist/types/index.js.map +1 -0
  474. package/dist/types/index.test.d.ts +6 -0
  475. package/dist/types/index.test.d.ts.map +1 -0
  476. package/dist/types/index.test.js +109 -0
  477. package/dist/types/index.test.js.map +1 -0
  478. package/dist/types/intersections.d.ts +12 -0
  479. package/dist/types/intersections.d.ts.map +1 -0
  480. package/dist/types/intersections.js +13 -0
  481. package/dist/types/intersections.js.map +1 -0
  482. package/dist/types/literals.d.ts +12 -0
  483. package/dist/types/literals.d.ts.map +1 -0
  484. package/dist/types/literals.js +20 -0
  485. package/dist/types/literals.js.map +1 -0
  486. package/{src/types/objects.ts → dist/types/objects.d.ts} +4 -11
  487. package/dist/types/objects.d.ts.map +1 -0
  488. package/dist/types/objects.js +19 -0
  489. package/dist/types/objects.js.map +1 -0
  490. package/dist/types/parameters.d.ts +15 -0
  491. package/dist/types/parameters.d.ts.map +1 -0
  492. package/dist/types/parameters.js +69 -0
  493. package/dist/types/parameters.js.map +1 -0
  494. package/dist/types/parameters.test.d.ts +5 -0
  495. package/dist/types/parameters.test.d.ts.map +1 -0
  496. package/dist/types/parameters.test.js +135 -0
  497. package/dist/types/parameters.test.js.map +1 -0
  498. package/dist/types/primitives.d.ts +12 -0
  499. package/dist/types/primitives.d.ts.map +1 -0
  500. package/dist/types/primitives.js +17 -0
  501. package/dist/types/primitives.js.map +1 -0
  502. package/dist/types/references.d.ts +14 -0
  503. package/dist/types/references.d.ts.map +1 -0
  504. package/dist/types/references.js +154 -0
  505. package/dist/types/references.js.map +1 -0
  506. package/dist/types/unions.d.ts +12 -0
  507. package/dist/types/unions.d.ts.map +1 -0
  508. package/dist/types/unions.js +45 -0
  509. package/dist/types/unions.js.map +1 -0
  510. package/dist/types/unions.test.d.ts +6 -0
  511. package/dist/types/unions.test.d.ts.map +1 -0
  512. package/dist/types/unions.test.js +367 -0
  513. package/dist/types/unions.test.js.map +1 -0
  514. package/dist/types.d.ts +7 -0
  515. package/dist/types.d.ts.map +1 -0
  516. package/dist/types.js +6 -0
  517. package/dist/types.js.map +1 -0
  518. package/dist/union.test.d.ts +6 -0
  519. package/dist/union.test.d.ts.map +1 -0
  520. package/dist/union.test.js +367 -0
  521. package/dist/union.test.js.map +1 -0
  522. package/package.json +5 -2
  523. package/scripts/update-golden-tests.ts +0 -119
  524. package/src/adapter-generator.ts +0 -112
  525. package/src/array.test.ts +0 -301
  526. package/src/constants.ts +0 -32
  527. package/src/core/exports.ts +0 -36
  528. package/src/core/imports.test.ts +0 -83
  529. package/src/core/imports.ts +0 -243
  530. package/src/core/module-emitter/assembly.ts +0 -83
  531. package/src/core/module-emitter/header.ts +0 -19
  532. package/src/core/module-emitter/namespace.ts +0 -39
  533. package/src/core/module-emitter/orchestrator.ts +0 -98
  534. package/src/core/module-emitter/separation.ts +0 -41
  535. package/src/core/module-emitter/static-container.ts +0 -75
  536. package/src/core/module-emitter.test.ts +0 -154
  537. package/src/core/module-map.ts +0 -218
  538. package/src/core/options.ts +0 -16
  539. package/src/core/type-params.ts +0 -34
  540. package/src/emitter-types/context.ts +0 -91
  541. package/src/emitter-types/core.ts +0 -138
  542. package/src/emitter-types/csharp-types.ts +0 -42
  543. package/src/emitter-types/formatting.ts +0 -13
  544. package/src/emitter-types/fqn.ts +0 -81
  545. package/src/emitter-types/index.ts +0 -31
  546. package/src/emitter.ts +0 -107
  547. package/src/expression-emitter.ts +0 -112
  548. package/src/expressions/access.ts +0 -104
  549. package/src/expressions/calls.ts +0 -264
  550. package/src/expressions/collections.ts +0 -354
  551. package/src/expressions/functions.ts +0 -71
  552. package/src/expressions/identifiers.ts +0 -125
  553. package/src/expressions/index.test.ts +0 -515
  554. package/src/expressions/literals.ts +0 -138
  555. package/src/expressions/operators.ts +0 -211
  556. package/src/expressions/other.ts +0 -63
  557. package/src/generator-exchange.ts +0 -120
  558. package/src/generator.test.ts +0 -193
  559. package/src/golden-tests/config-parser.ts +0 -67
  560. package/src/golden-tests/discovery.ts +0 -61
  561. package/src/golden-tests/registration.ts +0 -26
  562. package/src/golden-tests/runner.ts +0 -131
  563. package/src/golden-tests/tree-builder.ts +0 -43
  564. package/src/golden-tests/types.ts +0 -21
  565. package/src/hierarchical-bindings.test.ts +0 -258
  566. package/src/integration.test.ts +0 -303
  567. package/src/specialization/call-site-rewriting.test.ts +0 -99
  568. package/src/specialization/collection/expressions.ts +0 -184
  569. package/src/specialization/collection/orchestrator.ts +0 -25
  570. package/src/specialization/collection/statements.ts +0 -91
  571. package/src/specialization/collection.ts +0 -10
  572. package/src/specialization/generation.ts +0 -189
  573. package/src/specialization/generic-classes.test.ts +0 -59
  574. package/src/specialization/generic-functions.test.ts +0 -292
  575. package/src/specialization/helpers.ts +0 -39
  576. package/src/specialization/interfaces.test.ts +0 -151
  577. package/src/specialization/naming.ts +0 -34
  578. package/src/specialization/substitution.ts +0 -186
  579. package/src/specialization/type-aliases.test.ts +0 -134
  580. package/src/specialization/types.ts +0 -19
  581. package/src/statement-emitter.ts +0 -117
  582. package/src/statements/blocks.ts +0 -115
  583. package/src/statements/classes/inline-types.ts +0 -79
  584. package/src/statements/classes/members/constructors.ts +0 -123
  585. package/src/statements/classes/members/methods.ts +0 -137
  586. package/src/statements/classes/members/orchestrator.ts +0 -33
  587. package/src/statements/classes/members/properties.ts +0 -62
  588. package/src/statements/classes/parameters.ts +0 -69
  589. package/src/statements/classes/properties.ts +0 -95
  590. package/src/statements/classes.ts +0 -14
  591. package/src/statements/control/conditionals.ts +0 -134
  592. package/src/statements/control/exceptions.ts +0 -59
  593. package/src/statements/control/loops.ts +0 -250
  594. package/src/statements/control.ts +0 -14
  595. package/src/statements/declarations/classes.ts +0 -89
  596. package/src/statements/declarations/enums.ts +0 -32
  597. package/src/statements/declarations/functions.ts +0 -147
  598. package/src/statements/declarations/interfaces.ts +0 -116
  599. package/src/statements/declarations/structs.test.ts +0 -182
  600. package/src/statements/declarations/type-aliases.ts +0 -104
  601. package/src/statements/declarations/variables.ts +0 -159
  602. package/src/statements/declarations.ts +0 -13
  603. package/src/statements/index.test.ts +0 -258
  604. package/src/statements/index.ts +0 -43
  605. package/src/type-assertion.test.ts +0 -143
  606. package/src/type-emitter.ts +0 -18
  607. package/src/types/arrays.ts +0 -21
  608. package/src/types/dictionaries.ts +0 -52
  609. package/src/types/emitter.ts +0 -76
  610. package/src/types/functions.ts +0 -45
  611. package/src/types/index.test.ts +0 -116
  612. package/src/types/intersections.ts +0 -19
  613. package/src/types/literals.ts +0 -26
  614. package/src/types/parameters.test.ts +0 -146
  615. package/src/types/parameters.ts +0 -95
  616. package/src/types/primitives.ts +0 -24
  617. package/src/types/references.ts +0 -187
  618. package/src/types/unions.test.ts +0 -397
  619. package/src/types/unions.ts +0 -62
  620. package/src/types.ts +0 -33
  621. package/testcases/README.md +0 -213
  622. package/testcases/arrays/basic/ArrayLiteral.ts +0 -4
  623. package/testcases/arrays/basic/config.yaml +0 -1
  624. package/testcases/arrays/destructuring/ArrayDestructure.ts +0 -4
  625. package/testcases/arrays/destructuring/config.yaml +0 -1
  626. package/testcases/arrays/methods/ArrayMethods.ts +0 -6
  627. package/testcases/arrays/methods/config.yaml +0 -1
  628. package/testcases/arrays/multidimensional/MultiDimensional.ts +0 -10
  629. package/testcases/arrays/multidimensional/config.yaml +0 -1
  630. package/testcases/arrays/spread/ArraySpread.ts +0 -3
  631. package/testcases/arrays/spread/config.yaml +0 -1
  632. package/testcases/async/basic/AsyncFunction.ts +0 -5
  633. package/testcases/async/basic/config.yaml +0 -1
  634. package/testcases/classes/abstract/AbstractClasses.ts +0 -53
  635. package/testcases/classes/abstract/config.yaml +0 -1
  636. package/testcases/classes/basic/Person.ts +0 -12
  637. package/testcases/classes/basic/config.yaml +0 -1
  638. package/testcases/classes/constructor/User.ts +0 -11
  639. package/testcases/classes/constructor/config.yaml +0 -1
  640. package/testcases/classes/field-inference/Counter.ts +0 -11
  641. package/testcases/classes/field-inference/config.yaml +0 -1
  642. package/testcases/classes/inheritance/Inheritance.ts +0 -24
  643. package/testcases/classes/inheritance/config.yaml +0 -1
  644. package/testcases/classes/static-members/MathHelper.ts +0 -12
  645. package/testcases/classes/static-members/config.yaml +0 -1
  646. package/testcases/control-flow/error-handling/ErrorHandling.ts +0 -13
  647. package/testcases/control-flow/error-handling/config.yaml +0 -1
  648. package/testcases/control-flow/loops/Loops.ts +0 -21
  649. package/testcases/control-flow/loops/config.yaml +0 -1
  650. package/testcases/control-flow/switch/SwitchStatement.ts +0 -15
  651. package/testcases/control-flow/switch/config.yaml +0 -1
  652. package/testcases/edge-cases/complex-expressions/ComplexExpressions.ts +0 -10
  653. package/testcases/edge-cases/complex-expressions/config.yaml +0 -1
  654. package/testcases/edge-cases/nested-scopes/NestedScopes.ts +0 -10
  655. package/testcases/edge-cases/nested-scopes/config.yaml +0 -1
  656. package/testcases/edge-cases/shadowing/Shadowing.ts +0 -16
  657. package/testcases/edge-cases/shadowing/config.yaml +0 -1
  658. package/testcases/functions/arrow/ArrowFunction.ts +0 -5
  659. package/testcases/functions/arrow/config.yaml +0 -1
  660. package/testcases/functions/basic/Greet.ts +0 -3
  661. package/testcases/functions/basic/config.yaml +0 -1
  662. package/testcases/functions/closures/Closures.ts +0 -11
  663. package/testcases/functions/closures/config.yaml +0 -1
  664. package/testcases/functions/default-params/DefaultParams.ts +0 -7
  665. package/testcases/functions/default-params/config.yaml +0 -1
  666. package/testcases/functions/rest-params/RestParams.ts +0 -7
  667. package/testcases/functions/rest-params/config.yaml +0 -1
  668. package/testcases/functions/type-guards/TypeGuards.ts +0 -52
  669. package/testcases/functions/type-guards/config.yaml +0 -1
  670. package/testcases/operators/logical/LogicalOperators.ts +0 -11
  671. package/testcases/operators/logical/config.yaml +0 -1
  672. package/testcases/operators/nullish-coalescing/NullishCoalescing.ts +0 -7
  673. package/testcases/operators/nullish-coalescing/config.yaml +0 -1
  674. package/testcases/operators/optional-chaining/OptionalChaining.ts +0 -15
  675. package/testcases/operators/optional-chaining/config.yaml +0 -1
  676. package/testcases/real-world/advanced-generics/advanced-generics.ts +0 -116
  677. package/testcases/real-world/advanced-generics/config.yaml +0 -1
  678. package/testcases/real-world/async-ops/async-ops.ts +0 -67
  679. package/testcases/real-world/async-ops/config.yaml +0 -1
  680. package/testcases/real-world/business-logic/business-logic.ts +0 -215
  681. package/testcases/real-world/business-logic/config.yaml +0 -1
  682. package/testcases/real-world/calculator/calculator.ts +0 -29
  683. package/testcases/real-world/calculator/config.yaml +0 -1
  684. package/testcases/real-world/data-structures/config.yaml +0 -1
  685. package/testcases/real-world/data-structures/data-structures.ts +0 -133
  686. package/testcases/real-world/functional/config.yaml +0 -1
  687. package/testcases/real-world/functional/functional.ts +0 -116
  688. package/testcases/real-world/shapes/config.yaml +0 -1
  689. package/testcases/real-world/shapes/shapes.ts +0 -87
  690. package/testcases/real-world/string-utils/config.yaml +0 -1
  691. package/testcases/real-world/string-utils/string-utils.ts +0 -47
  692. package/testcases/real-world/todo-list/config.yaml +0 -1
  693. package/testcases/real-world/todo-list/todo-list.ts +0 -52
  694. package/testcases/real-world/type-guards/config.yaml +0 -1
  695. package/testcases/real-world/type-guards/type-guards.ts +0 -71
  696. package/testcases/structs/basic/Point.ts +0 -9
  697. package/testcases/structs/basic/config.yaml +0 -1
  698. package/testcases/types/conditional/ConditionalTypes.ts +0 -35
  699. package/testcases/types/conditional/config.yaml +0 -1
  700. package/testcases/types/constants/ModuleConstants.ts +0 -6
  701. package/testcases/types/constants/config.yaml +0 -1
  702. package/testcases/types/generics/Generics.ts +0 -15
  703. package/testcases/types/generics/config.yaml +0 -1
  704. package/testcases/types/interfaces/Interfaces.ts +0 -14
  705. package/testcases/types/interfaces/config.yaml +0 -1
  706. package/testcases/types/mapped/MappedTypes.ts +0 -27
  707. package/testcases/types/mapped/config.yaml +0 -1
  708. package/testcases/types/tuples-intersections/TuplesAndIntersections.ts +0 -46
  709. package/testcases/types/tuples-intersections/config.yaml +0 -1
  710. package/testcases/types/unions/UnionTypes.ts +0 -11
  711. package/testcases/types/unions/config.yaml +0 -1
  712. package/tsconfig.json +0 -14
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Member access expression emitters
3
+ */
4
+ import { emitExpression } from "../expression-emitter.js";
5
+ import { isExplicitViewProperty, extractInterfaceNameFromView, } from "@tsonic/frontend/types/explicit-views.js";
6
+ /**
7
+ * Emit a member access expression (dot notation or bracket notation)
8
+ */
9
+ export const emitMemberAccess = (expr, context) => {
10
+ // Check if this is a hierarchical member binding
11
+ if (expr.memberBinding) {
12
+ // Emit the full CLR type and member with global:: prefix
13
+ const { assembly, type, member } = expr.memberBinding;
14
+ const text = `global::${assembly}.${type}.${member}`;
15
+ return [{ text }, context];
16
+ }
17
+ const [objectFrag, newContext] = emitExpression(expr.object, context);
18
+ // Default runtime to "js" when not specified
19
+ const runtime = context.options.runtime ?? "js";
20
+ if (expr.isComputed) {
21
+ // Check if this is array index access - rewrite to static helper
22
+ const objectType = expr.object.inferredType;
23
+ const isArrayType = objectType?.kind === "arrayType";
24
+ // For TS arrays, use Tsonic.Runtime.Array.get() in BOTH modes
25
+ // This provides TS array semantics (auto-grow, sparse arrays, etc.)
26
+ // Note: Tsonic.Runtime is compiler support for lowered TS constructs (both modes)
27
+ // Tsonic.JSRuntime is JS built-ins like .map/.filter (js mode only)
28
+ if (isArrayType) {
29
+ const indexContext = { ...newContext, isArrayIndex: true };
30
+ const [propFrag, contextWithIndex] = emitExpression(expr.property, indexContext);
31
+ const finalContext = { ...contextWithIndex, isArrayIndex: false };
32
+ const text = `global::Tsonic.Runtime.Array.get(${objectFrag.text}, ${propFrag.text})`;
33
+ return [{ text }, finalContext];
34
+ }
35
+ // CLR indexer access (non-TS-array types like List<T>, string, etc.)
36
+ // CLR indexers require integral indices.
37
+ // This applies in BOTH js and dotnet modes - CLR type requirements are mode-independent.
38
+ const indexContext = { ...newContext, isArrayIndex: true };
39
+ const [propFrag, contextWithIndex] = emitExpression(expr.property, indexContext);
40
+ const finalContext = { ...contextWithIndex, isArrayIndex: false };
41
+ const accessor = expr.isOptional ? "?[" : "[";
42
+ // Check if the index is already known to be int (e.g., canonical loop counter)
43
+ const indexExpr = expr.property;
44
+ const isKnownInt = indexExpr.kind === "identifier" &&
45
+ context.intLoopVars?.has(indexExpr.name);
46
+ // Skip cast if index is known int, otherwise cast for safety
47
+ const indexText = isKnownInt ? propFrag.text : `(int)(${propFrag.text})`;
48
+ const text = `${objectFrag.text}${accessor}${indexText}]`;
49
+ return [{ text }, finalContext];
50
+ }
51
+ // Property access
52
+ const prop = expr.property;
53
+ const objectType = expr.object.inferredType;
54
+ const isArrayType = objectType?.kind === "arrayType";
55
+ // In JS runtime mode, rewrite array.length → global::Tsonic.Runtime.Array.length(array)
56
+ // In dotnet mode, there is no JS emulation - users access .Count directly on List<T>
57
+ if (isArrayType && prop === "length" && runtime === "js") {
58
+ const text = `global::Tsonic.Runtime.Array.length(${objectFrag.text})`;
59
+ return [{ text }, newContext];
60
+ }
61
+ // Handle explicit interface view properties (As_IInterface)
62
+ if (isExplicitViewProperty(prop)) {
63
+ const interfaceName = extractInterfaceNameFromView(prop);
64
+ if (interfaceName) {
65
+ // Emit as C# interface cast: ((IInterface)obj)
66
+ // TODO: Need to look up full interface name from metadata
67
+ // For now, use the extracted short name
68
+ const text = `((${interfaceName})${objectFrag.text})`;
69
+ return [{ text }, newContext];
70
+ }
71
+ }
72
+ // Regular property access
73
+ const accessor = expr.isOptional ? "?." : ".";
74
+ const text = `${objectFrag.text}${accessor}${prop}`;
75
+ return [{ text }, newContext];
76
+ };
77
+ //# sourceMappingURL=access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Call and new expression emitters
3
+ */
4
+ import { IrExpression } from "@tsonic/frontend";
5
+ import { EmitterContext, CSharpFragment } from "../types.js";
6
+ /**
7
+ * Emit a function call expression
8
+ */
9
+ export declare const emitCall: (expr: Extract<IrExpression, {
10
+ kind: "call";
11
+ }>, context: EmitterContext) => [CSharpFragment, EmitterContext];
12
+ /**
13
+ * Emit a new expression
14
+ */
15
+ export declare const emitNew: (expr: Extract<IrExpression, {
16
+ kind: "new";
17
+ }>, context: EmitterContext) => [CSharpFragment, EmitterContext];
18
+ //# sourceMappingURL=calls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../src/expressions/calls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA0D7D;;GAEG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7C,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CA4IjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,EAC5C,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CA8CjC,CAAC"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Call and new expression emitters
3
+ */
4
+ import { emitExpression } from "../expression-emitter.js";
5
+ import { emitTypeArguments, generateSpecializedName } from "./identifiers.js";
6
+ /**
7
+ * Ref/out/in parameter handling:
8
+ * The frontend extracts parameter passing modes from resolved signatures
9
+ * and attaches them to IrCallExpression.argumentPassing array.
10
+ * The emitter reads this array and prefixes arguments with ref/out/in keywords.
11
+ */
12
+ /**
13
+ * Check if an expression is an lvalue (can be passed by reference)
14
+ * Only identifiers and member accesses are lvalues in C#
15
+ */
16
+ const isLValue = (expr) => {
17
+ return expr.kind === "identifier" || expr.kind === "memberAccess";
18
+ };
19
+ /**
20
+ * Check if a call expression needs an explicit cast because the inferred type
21
+ * differs from the C# return type. This handles cases like Math.floor() which
22
+ * returns double in C# but is cast to int in TypeScript via `as int`.
23
+ */
24
+ const needsIntCast = (expr, calleeName) => {
25
+ // Check if the inferred type is int (a reference type from @tsonic/types)
26
+ const inferredType = expr.inferredType;
27
+ if (!inferredType ||
28
+ inferredType.kind !== "referenceType" ||
29
+ inferredType.name !== "int") {
30
+ return false;
31
+ }
32
+ // Check if this is a Math method that returns double
33
+ const mathMethodsReturningDouble = [
34
+ "Math.floor",
35
+ "Math.ceil",
36
+ "Math.round",
37
+ "Math.abs",
38
+ "Math.pow",
39
+ "Math.sqrt",
40
+ "Math.min",
41
+ "Math.max",
42
+ "Tsonic.JSRuntime.Math.floor",
43
+ "Tsonic.JSRuntime.Math.ceil",
44
+ "Tsonic.JSRuntime.Math.round",
45
+ ];
46
+ return mathMethodsReturningDouble.some((m) => calleeName === m || calleeName.endsWith(`.${m.split(".").pop()}`));
47
+ };
48
+ /**
49
+ * Emit a function call expression
50
+ */
51
+ export const emitCall = (expr, context) => {
52
+ // Type-aware method call rewriting
53
+ // Use inferredType to determine if we need to rewrite as static helper
54
+ if (expr.callee.kind === "memberAccess" &&
55
+ typeof expr.callee.property === "string") {
56
+ const methodName = expr.callee.property;
57
+ const objectType = expr.callee.object.inferredType;
58
+ // Rewrite based on type:
59
+ // - string → Tsonic.JSRuntime.String.method()
60
+ // - number → Tsonic.JSRuntime.Number.method()
61
+ // - Array<T> → Tsonic.JSRuntime.Array.method() (extension methods on List<T>)
62
+ // - Other custom types → Keep as instance method
63
+ const isStringType = objectType?.kind === "primitiveType" && objectType.name === "string";
64
+ const isNumberType = objectType?.kind === "primitiveType" && objectType.name === "number";
65
+ const isArrayType = objectType?.kind === "arrayType";
66
+ const shouldRewriteAsStatic = isStringType || isNumberType || isArrayType;
67
+ // Only rewrite to JSRuntime in "js" mode
68
+ // In "dotnet" mode, there is no JS emulation - use .NET APIs directly
69
+ const runtime = context.options.runtime ?? "js";
70
+ if (shouldRewriteAsStatic && runtime === "js") {
71
+ // Runtime mode "js": Use Tsonic.JSRuntime
72
+ // Determine which runtime class based on type
73
+ let runtimeClass;
74
+ if (isStringType) {
75
+ runtimeClass = "String";
76
+ }
77
+ else if (isNumberType) {
78
+ runtimeClass = "Number";
79
+ }
80
+ else {
81
+ runtimeClass = "Array";
82
+ }
83
+ // Rewrite: obj.method(args) → global::Tsonic.JSRuntime.{Class}.method(obj, args)
84
+ const [objectFrag, objContext] = emitExpression(expr.callee.object, context);
85
+ let currentContext = objContext;
86
+ const args = [objectFrag.text]; // Object becomes first argument
87
+ for (let i = 0; i < expr.arguments.length; i++) {
88
+ const arg = expr.arguments[i];
89
+ if (!arg)
90
+ continue; // Skip undefined (shouldn't happen in valid IR)
91
+ if (arg.kind === "spread") {
92
+ const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
93
+ args.push(`params ${spreadFrag.text}`);
94
+ currentContext = ctx;
95
+ }
96
+ else {
97
+ const [argFrag, ctx] = emitExpression(arg, currentContext);
98
+ // Check if this argument needs ref/out/in prefix
99
+ // Note: argumentPassing[i] corresponds to method parameter i+1 (first param is the object)
100
+ // Only add prefix if argument is an lvalue (identifier or member access)
101
+ const passingMode = expr.argumentPassing?.[i + 1];
102
+ const prefix = passingMode && passingMode !== "value" && isLValue(arg)
103
+ ? `${passingMode} `
104
+ : "";
105
+ args.push(`${prefix}${argFrag.text}`);
106
+ currentContext = ctx;
107
+ }
108
+ }
109
+ const text = `global::Tsonic.JSRuntime.${runtimeClass}.${methodName}(${args.join(", ")})`;
110
+ return [{ text }, currentContext];
111
+ }
112
+ }
113
+ // Regular function call
114
+ const [calleeFrag, newContext] = emitExpression(expr.callee, context);
115
+ let currentContext = newContext;
116
+ // Handle generic type arguments
117
+ let typeArgsStr = "";
118
+ let finalCalleeName = calleeFrag.text;
119
+ if (expr.typeArguments && expr.typeArguments.length > 0) {
120
+ if (expr.requiresSpecialization) {
121
+ // Monomorphisation: Generate specialized method name
122
+ // e.g., process<string> → process__string
123
+ const [specializedName, specContext] = generateSpecializedName(calleeFrag.text, expr.typeArguments, currentContext);
124
+ finalCalleeName = specializedName;
125
+ currentContext = specContext;
126
+ }
127
+ else {
128
+ // Emit explicit type arguments for generic call
129
+ // e.g., identity<string>(value)
130
+ const [typeArgs, typeContext] = emitTypeArguments(expr.typeArguments, currentContext);
131
+ typeArgsStr = typeArgs;
132
+ currentContext = typeContext;
133
+ }
134
+ }
135
+ const args = [];
136
+ for (let i = 0; i < expr.arguments.length; i++) {
137
+ const arg = expr.arguments[i];
138
+ if (!arg)
139
+ continue; // Skip undefined (shouldn't happen in valid IR)
140
+ if (arg.kind === "spread") {
141
+ // Spread in function call
142
+ const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
143
+ args.push(`params ${spreadFrag.text}`);
144
+ currentContext = ctx;
145
+ }
146
+ else {
147
+ const [argFrag, ctx] = emitExpression(arg, currentContext);
148
+ // Check if this argument needs ref/out/in prefix
149
+ // Only add prefix if argument is an lvalue (identifier or member access)
150
+ const passingMode = expr.argumentPassing?.[i];
151
+ const prefix = passingMode && passingMode !== "value" && isLValue(arg)
152
+ ? `${passingMode} `
153
+ : "";
154
+ args.push(`${prefix}${argFrag.text}`);
155
+ currentContext = ctx;
156
+ }
157
+ }
158
+ const callOp = expr.isOptional ? "?." : "";
159
+ const callText = `${finalCalleeName}${typeArgsStr}${callOp}(${args.join(", ")})`;
160
+ // Add cast if needed (e.g., Math.floor returning double but asserted as int)
161
+ const text = needsIntCast(expr, finalCalleeName)
162
+ ? `(int)${callText}`
163
+ : callText;
164
+ return [{ text }, currentContext];
165
+ };
166
+ /**
167
+ * Emit a new expression
168
+ */
169
+ export const emitNew = (expr, context) => {
170
+ const [calleeFrag, newContext] = emitExpression(expr.callee, context);
171
+ let currentContext = newContext;
172
+ // Handle generic type arguments
173
+ let typeArgsStr = "";
174
+ let finalClassName = calleeFrag.text;
175
+ if (expr.typeArguments && expr.typeArguments.length > 0) {
176
+ if (expr.requiresSpecialization) {
177
+ // Monomorphisation: Generate specialized class name
178
+ // e.g., new Box<string>() → new Box__string()
179
+ const [specializedName, specContext] = generateSpecializedName(calleeFrag.text, expr.typeArguments, currentContext);
180
+ finalClassName = specializedName;
181
+ currentContext = specContext;
182
+ }
183
+ else {
184
+ // Emit explicit type arguments for generic constructor
185
+ // e.g., new Box<string>(value)
186
+ const [typeArgs, typeContext] = emitTypeArguments(expr.typeArguments, currentContext);
187
+ typeArgsStr = typeArgs;
188
+ currentContext = typeContext;
189
+ }
190
+ }
191
+ const args = [];
192
+ for (const arg of expr.arguments) {
193
+ if (arg.kind === "spread") {
194
+ const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
195
+ args.push(`params ${spreadFrag.text}`);
196
+ currentContext = ctx;
197
+ }
198
+ else {
199
+ const [argFrag, ctx] = emitExpression(arg, currentContext);
200
+ args.push(argFrag.text);
201
+ currentContext = ctx;
202
+ }
203
+ }
204
+ const text = `new ${finalClassName}${typeArgsStr}(${args.join(", ")})`;
205
+ return [{ text }, currentContext];
206
+ };
207
+ //# sourceMappingURL=calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/expressions/calls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Collection expression emitters (arrays and objects)
3
+ */
4
+ import { IrExpression, IrType } from "@tsonic/frontend";
5
+ import { EmitterContext, CSharpFragment } from "../types.js";
6
+ /**
7
+ * Emit an array literal
8
+ */
9
+ export declare const emitArray: (expr: Extract<IrExpression, {
10
+ kind: "array";
11
+ }>, context: EmitterContext, expectedType?: IrType) => [CSharpFragment, EmitterContext];
12
+ /**
13
+ * Emit an object literal
14
+ *
15
+ * Handles two cases based on contextual type:
16
+ * 1. Dictionary type (Record<K,V> or index signature) → Dictionary<string, T> initializer
17
+ * 2. Nominal type (interface, class) → new TypeName { prop = value, ... }
18
+ *
19
+ * Anonymous object types should be caught by validation (TSN7403) before reaching here.
20
+ */
21
+ export declare const emitObject: (expr: Extract<IrExpression, {
22
+ kind: "object";
23
+ }>, context: EmitterContext) => [CSharpFragment, EmitterContext];
24
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/expressions/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgB7D;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,EAC9C,SAAS,cAAc,EACvB,eAAe,MAAM,KACpB,CAAC,cAAc,EAAE,cAAc,CAmJjC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,EAC/C,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CA0CjC,CAAC"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Collection expression emitters (arrays and objects)
3
+ */
4
+ import { emitType } from "../type-emitter.js";
5
+ import { emitExpression } from "../expression-emitter.js";
6
+ /**
7
+ * Escape a string for use in a C# string literal.
8
+ * Handles backslashes, quotes, newlines, carriage returns, and tabs.
9
+ */
10
+ const escapeCSharpString = (str) => str
11
+ .replace(/\\/g, "\\\\")
12
+ .replace(/"/g, '\\"')
13
+ .replace(/\n/g, "\\n")
14
+ .replace(/\r/g, "\\r")
15
+ .replace(/\t/g, "\\t");
16
+ /**
17
+ * Emit an array literal
18
+ */
19
+ export const emitArray = (expr, context, expectedType) => {
20
+ let currentContext = context;
21
+ const elements = [];
22
+ // Determine element type from expected type or inferred type
23
+ let elementType = "object";
24
+ // Check if all elements are literals to infer element type
25
+ const definedElements = expr.elements.filter((el) => el !== undefined);
26
+ if (definedElements.length > 0) {
27
+ const allLiterals = definedElements.every((el) => el.kind === "literal");
28
+ if (allLiterals) {
29
+ const literals = definedElements;
30
+ // Check if all are numbers
31
+ const allNumbers = literals.every((lit) => typeof lit.value === "number");
32
+ if (allNumbers) {
33
+ // TypeScript `number` is always `double` in C#
34
+ // Even if all literals are integers, use double for TS semantics
35
+ elementType = "double";
36
+ }
37
+ // Check if all are strings
38
+ else if (literals.every((lit) => typeof lit.value === "string")) {
39
+ elementType = "string";
40
+ }
41
+ // Check if all are booleans
42
+ else if (literals.every((lit) => typeof lit.value === "boolean")) {
43
+ elementType = "bool";
44
+ }
45
+ }
46
+ }
47
+ // Use expected/inferred type if available (takes precedence over literal inference)
48
+ if (expectedType) {
49
+ if (expectedType.kind === "arrayType") {
50
+ const [elemTypeStr, newContext] = emitType(expectedType.elementType, currentContext);
51
+ elementType = elemTypeStr;
52
+ currentContext = newContext;
53
+ }
54
+ else if (expectedType.kind === "referenceType" &&
55
+ expectedType.name === "Array" &&
56
+ expectedType.typeArguments &&
57
+ expectedType.typeArguments.length > 0) {
58
+ const firstArg = expectedType.typeArguments[0];
59
+ if (firstArg) {
60
+ const [elemTypeStr, newContext] = emitType(firstArg, currentContext);
61
+ elementType = elemTypeStr;
62
+ currentContext = newContext;
63
+ }
64
+ }
65
+ }
66
+ // If no expectedType, try to use the inferredType from the expression
67
+ else if (expr.inferredType && expr.inferredType.kind === "arrayType") {
68
+ // Only use inferredType if we didn't already determine the type from literals
69
+ if (elementType === "object") {
70
+ const [elemTypeStr, newContext] = emitType(expr.inferredType.elementType, currentContext);
71
+ elementType = elemTypeStr;
72
+ currentContext = newContext;
73
+ }
74
+ }
75
+ // Check if array contains only spread elements (e.g., [...arr1, ...arr2])
76
+ const allSpreads = expr.elements.every((el) => el !== undefined && el.kind === "spread");
77
+ if (allSpreads && expr.elements.length > 0) {
78
+ // Emit as chained Enumerable.Concat calls using explicit static invocation
79
+ // Note: Concat returns IEnumerable<T>, so wrap in Enumerable.ToList() at the end
80
+ const spreadElements = expr.elements.filter((el) => el !== undefined && el.kind === "spread");
81
+ const firstSpread = spreadElements[0];
82
+ if (!firstSpread) {
83
+ // Should never happen due to allSpreads check, but satisfy TypeScript
84
+ return [
85
+ { text: "new global::System.Collections.Generic.List<object>()" },
86
+ currentContext,
87
+ ];
88
+ }
89
+ const [firstFrag, firstContext] = emitExpression(firstSpread.expression, currentContext);
90
+ currentContext = firstContext;
91
+ let result = firstFrag.text;
92
+ for (let i = 1; i < spreadElements.length; i++) {
93
+ const spread = spreadElements[i];
94
+ if (spread) {
95
+ const [spreadFrag, newContext] = emitExpression(spread.expression, currentContext);
96
+ // Use explicit static call for extension method
97
+ result = `global::System.Linq.Enumerable.Concat(${result}, ${spreadFrag.text})`;
98
+ currentContext = newContext;
99
+ }
100
+ }
101
+ // Wrap in Enumerable.ToList() using explicit static call
102
+ return [
103
+ { text: `global::System.Linq.Enumerable.ToList(${result})` },
104
+ currentContext,
105
+ ];
106
+ }
107
+ // Regular array or mixed spreads/elements
108
+ for (const element of expr.elements) {
109
+ if (element === undefined) {
110
+ // Sparse array hole - fill with default value
111
+ elements.push("default");
112
+ }
113
+ else if (element.kind === "spread") {
114
+ // Spread mixed with other elements - not yet supported
115
+ elements.push("/* ...spread */");
116
+ }
117
+ else {
118
+ const [elemFrag, newContext] = emitExpression(element, currentContext);
119
+ elements.push(elemFrag.text);
120
+ currentContext = newContext;
121
+ }
122
+ }
123
+ // Use constructor syntax for empty arrays, initializer syntax for non-empty
124
+ const text = elements.length === 0
125
+ ? `new global::System.Collections.Generic.List<${elementType}>()`
126
+ : `new global::System.Collections.Generic.List<${elementType}> { ${elements.join(", ")} }`;
127
+ return [{ text }, currentContext];
128
+ };
129
+ /**
130
+ * Emit an object literal
131
+ *
132
+ * Handles two cases based on contextual type:
133
+ * 1. Dictionary type (Record<K,V> or index signature) → Dictionary<string, T> initializer
134
+ * 2. Nominal type (interface, class) → new TypeName { prop = value, ... }
135
+ *
136
+ * Anonymous object types should be caught by validation (TSN7403) before reaching here.
137
+ */
138
+ export const emitObject = (expr, context) => {
139
+ let currentContext = context;
140
+ // Check if contextual type is a dictionary type
141
+ if (expr.contextualType?.kind === "dictionaryType") {
142
+ return emitDictionaryLiteral(expr, currentContext);
143
+ }
144
+ // Regular object literal with nominal type
145
+ const properties = [];
146
+ for (const prop of expr.properties) {
147
+ if (prop.kind === "spread") {
148
+ // Spread in object literal - needs special handling
149
+ properties.push("/* ...spread */");
150
+ }
151
+ else {
152
+ const key = typeof prop.key === "string" ? prop.key : "/* computed */";
153
+ const [valueFrag, newContext] = emitExpression(prop.value, currentContext);
154
+ properties.push(`${key} = ${valueFrag.text}`);
155
+ currentContext = newContext;
156
+ }
157
+ }
158
+ // Check for contextual type (from return type, variable annotation, etc.)
159
+ // If present, emit `new TypeName { ... }` instead of anonymous `new { ... }`
160
+ const [typeName, finalContext] = resolveContextualType(expr.contextualType, currentContext);
161
+ if (!typeName) {
162
+ // ICE: Validation (TSN7403) should have caught anonymous object literals
163
+ throw new Error("ICE: Object literal without contextual type reached emitter - validation missed TSN7403");
164
+ }
165
+ const text = `new ${typeName} { ${properties.join(", ")} }`;
166
+ return [{ text }, finalContext];
167
+ };
168
+ /**
169
+ * Emit a dictionary literal using C# collection initializer syntax.
170
+ *
171
+ * Input: const d: Record<string, number> = { a: 1, b: 2 };
172
+ * Output: new Dictionary<string, double> { ["a"] = 1.0, ["b"] = 2.0 }
173
+ */
174
+ const emitDictionaryLiteral = (expr, context) => {
175
+ let currentContext = context;
176
+ const dictType = expr.contextualType;
177
+ // Get key and value type strings
178
+ const [keyTypeStr, ctx1] = emitDictKeyType(dictType.keyType, currentContext);
179
+ const [valueTypeStr, ctx2] = emitType(dictType.valueType, ctx1);
180
+ currentContext = ctx2;
181
+ // Emit dictionary entries
182
+ const entries = [];
183
+ for (const prop of expr.properties) {
184
+ if (prop.kind === "spread") {
185
+ // Spread in dictionary literal - not supported
186
+ throw new Error("ICE: Spread in dictionary literal not supported");
187
+ }
188
+ else {
189
+ // Key must be a string literal for dictionary initialization
190
+ if (typeof prop.key !== "string") {
191
+ throw new Error("ICE: Computed property key in dictionary literal - validation gap");
192
+ }
193
+ const [valueFrag, newContext] = emitExpression(prop.value, currentContext);
194
+ entries.push(`["${escapeCSharpString(prop.key)}"] = ${valueFrag.text}`);
195
+ currentContext = newContext;
196
+ }
197
+ }
198
+ const text = entries.length === 0
199
+ ? `new global::System.Collections.Generic.Dictionary<${keyTypeStr}, ${valueTypeStr}>()`
200
+ : `new global::System.Collections.Generic.Dictionary<${keyTypeStr}, ${valueTypeStr}> { ${entries.join(", ")} }`;
201
+ return [{ text }, currentContext];
202
+ };
203
+ /**
204
+ * Emit dictionary key type.
205
+ * TS dictionaries only support string keys (enforced by TSN7413).
206
+ */
207
+ const emitDictKeyType = (keyType, context) => {
208
+ if (keyType.kind === "primitiveType" && keyType.name === "string") {
209
+ return ["string", context];
210
+ }
211
+ // ICE: Only string keys allowed (enforced by TSN7413)
212
+ throw new Error(`ICE: Non-string dictionary key type reached emitter - validation missed TSN7413. Got: ${keyType.kind}`);
213
+ };
214
+ /**
215
+ * Resolve contextual type to C# type string.
216
+ * Uses emitType to properly handle generic type arguments.
217
+ * For imported types, qualifies using importBindings.
218
+ */
219
+ const resolveContextualType = (contextualType, context) => {
220
+ if (!contextualType) {
221
+ return [undefined, context];
222
+ }
223
+ // For reference types, check if imported and qualify if needed
224
+ if (contextualType.kind === "referenceType") {
225
+ const typeName = contextualType.name;
226
+ const importBinding = context.importBindings?.get(typeName);
227
+ if (importBinding && importBinding.kind === "type") {
228
+ // Imported type - use qualified name from binding
229
+ // Emit type arguments if present
230
+ if (contextualType.typeArguments &&
231
+ contextualType.typeArguments.length > 0) {
232
+ let currentContext = context;
233
+ const typeArgStrs = [];
234
+ for (const typeArg of contextualType.typeArguments) {
235
+ const [typeArgStr, newContext] = emitType(typeArg, currentContext);
236
+ typeArgStrs.push(typeArgStr);
237
+ currentContext = newContext;
238
+ }
239
+ return [
240
+ `${importBinding.clrName}<${typeArgStrs.join(", ")}>`,
241
+ currentContext,
242
+ ];
243
+ }
244
+ return [importBinding.clrName, context];
245
+ }
246
+ // Local type - use emitType to handle type arguments
247
+ const [typeStr, newContext] = emitType(contextualType, context);
248
+ return [typeStr, newContext];
249
+ }
250
+ // For other types, use standard emitType
251
+ const [typeStr, newContext] = emitType(contextualType, context);
252
+ return [typeStr, newContext];
253
+ };
254
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/expressions/collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Function expression emitters (function expressions and arrow functions)
3
+ */
4
+ import { IrExpression } from "@tsonic/frontend";
5
+ import { EmitterContext, CSharpFragment } from "../types.js";
6
+ /**
7
+ * Emit a function expression (placeholder for now)
8
+ */
9
+ export declare const emitFunctionExpression: (_expr: Extract<IrExpression, {
10
+ kind: "functionExpression";
11
+ }>, context: EmitterContext) => [CSharpFragment, EmitterContext];
12
+ /**
13
+ * Emit an arrow function as C# lambda
14
+ */
15
+ export declare const emitArrowFunction: (expr: Extract<IrExpression, {
16
+ kind: "arrowFunction";
17
+ }>, context: EmitterContext) => [CSharpFragment, EmitterContext];
18
+ //# sourceMappingURL=functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/expressions/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAU,MAAM,aAAa,CAAC;AAIrE;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,CAAC,EAC5D,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CAKjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,EACtD,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CA0CjC,CAAC"}