@tsonic/emitter 0.0.14 → 0.0.16

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 (242) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-generator.js +3 -3
  3. package/dist/adapter-generator.js.map +1 -1
  4. package/dist/array.test.d.ts +1 -1
  5. package/dist/array.test.js +18 -17
  6. package/dist/array.test.js.map +1 -1
  7. package/dist/core/attributes.test.js +2 -2
  8. package/dist/core/attributes.test.js.map +1 -1
  9. package/dist/core/imports.d.ts.map +1 -1
  10. package/dist/core/imports.js +7 -12
  11. package/dist/core/imports.js.map +1 -1
  12. package/dist/core/local-types.d.ts.map +1 -1
  13. package/dist/core/local-types.js +12 -0
  14. package/dist/core/local-types.js.map +1 -1
  15. package/dist/core/module-emitter/orchestrator.d.ts.map +1 -1
  16. package/dist/core/module-emitter/orchestrator.js +15 -2
  17. package/dist/core/module-emitter/orchestrator.js.map +1 -1
  18. package/dist/core/module-emitter/static-container.d.ts.map +1 -1
  19. package/dist/core/module-emitter/static-container.js +30 -4
  20. package/dist/core/module-emitter/static-container.js.map +1 -1
  21. package/dist/core/module-emitter.test.js +6 -6
  22. package/dist/core/module-map.d.ts.map +1 -1
  23. package/dist/core/module-map.js +42 -0
  24. package/dist/core/module-map.js.map +1 -1
  25. package/dist/core/naming-collisions.d.ts +4 -0
  26. package/dist/core/naming-collisions.d.ts.map +1 -0
  27. package/dist/core/naming-collisions.js +191 -0
  28. package/dist/core/naming-collisions.js.map +1 -0
  29. package/dist/core/type-member-index.d.ts +4 -0
  30. package/dist/core/type-member-index.d.ts.map +1 -0
  31. package/dist/core/type-member-index.js +62 -0
  32. package/dist/core/type-member-index.js.map +1 -0
  33. package/dist/core/unsafe.d.ts +11 -0
  34. package/dist/core/unsafe.d.ts.map +1 -0
  35. package/dist/core/unsafe.js +264 -0
  36. package/dist/core/unsafe.js.map +1 -0
  37. package/dist/emitter-types/context.d.ts +1 -1
  38. package/dist/emitter-types/context.d.ts.map +1 -1
  39. package/dist/emitter-types/context.js +5 -3
  40. package/dist/emitter-types/context.js.map +1 -1
  41. package/dist/emitter-types/core.d.ts +45 -2
  42. package/dist/emitter-types/core.d.ts.map +1 -1
  43. package/dist/emitter-types/fqn.d.ts +0 -7
  44. package/dist/emitter-types/fqn.d.ts.map +1 -1
  45. package/dist/emitter-types/fqn.js +0 -8
  46. package/dist/emitter-types/fqn.js.map +1 -1
  47. package/dist/emitter-types/index.d.ts +1 -1
  48. package/dist/emitter-types/index.d.ts.map +1 -1
  49. package/dist/emitter-types/index.js.map +1 -1
  50. package/dist/emitter.d.ts.map +1 -1
  51. package/dist/emitter.js +12 -1
  52. package/dist/emitter.js.map +1 -1
  53. package/dist/expression-emitter.d.ts.map +1 -1
  54. package/dist/expression-emitter.js +255 -73
  55. package/dist/expression-emitter.js.map +1 -1
  56. package/dist/expressions/access.d.ts +3 -1
  57. package/dist/expressions/access.d.ts.map +1 -1
  58. package/dist/expressions/access.js +144 -50
  59. package/dist/expressions/access.js.map +1 -1
  60. package/dist/expressions/calls.d.ts.map +1 -1
  61. package/dist/expressions/calls.js +266 -88
  62. package/dist/expressions/calls.js.map +1 -1
  63. package/dist/expressions/collections.d.ts.map +1 -1
  64. package/dist/expressions/collections.js +169 -57
  65. package/dist/expressions/collections.js.map +1 -1
  66. package/dist/expressions/functions.d.ts.map +1 -1
  67. package/dist/expressions/functions.js +30 -10
  68. package/dist/expressions/functions.js.map +1 -1
  69. package/dist/expressions/identifiers.d.ts.map +1 -1
  70. package/dist/expressions/identifiers.js +11 -30
  71. package/dist/expressions/identifiers.js.map +1 -1
  72. package/dist/expressions/index.test.js +89 -200
  73. package/dist/expressions/index.test.js.map +1 -1
  74. package/dist/expressions/literals.d.ts +4 -5
  75. package/dist/expressions/literals.d.ts.map +1 -1
  76. package/dist/expressions/literals.js +94 -15
  77. package/dist/expressions/literals.js.map +1 -1
  78. package/dist/expressions/operators.d.ts +0 -4
  79. package/dist/expressions/operators.d.ts.map +1 -1
  80. package/dist/expressions/operators.js +84 -24
  81. package/dist/expressions/operators.js.map +1 -1
  82. package/dist/expressions/other.d.ts.map +1 -1
  83. package/dist/expressions/other.js +21 -3
  84. package/dist/expressions/other.js.map +1 -1
  85. package/dist/expressions/parentheses.d.ts +4 -0
  86. package/dist/expressions/parentheses.d.ts.map +1 -0
  87. package/dist/expressions/parentheses.js +83 -0
  88. package/dist/expressions/parentheses.js.map +1 -0
  89. package/dist/extension-methods.test.d.ts +5 -0
  90. package/dist/extension-methods.test.d.ts.map +1 -0
  91. package/dist/extension-methods.test.js +110 -0
  92. package/dist/extension-methods.test.js.map +1 -0
  93. package/dist/generator-exchange.d.ts.map +1 -1
  94. package/dist/generator-exchange.js +5 -2
  95. package/dist/generator-exchange.js.map +1 -1
  96. package/dist/generator-wrapper.d.ts.map +1 -1
  97. package/dist/generator-wrapper.js +13 -7
  98. package/dist/generator-wrapper.js.map +1 -1
  99. package/dist/generator-wrapper.test.js +12 -12
  100. package/dist/generator-wrapper.test.js.map +1 -1
  101. package/dist/generator.test.js +42 -42
  102. package/dist/generator.test.js.map +1 -1
  103. package/dist/golden-tests/discovery.d.ts +6 -11
  104. package/dist/golden-tests/discovery.d.ts.map +1 -1
  105. package/dist/golden-tests/discovery.js +14 -79
  106. package/dist/golden-tests/discovery.js.map +1 -1
  107. package/dist/golden-tests/index.d.ts +1 -1
  108. package/dist/golden-tests/index.d.ts.map +1 -1
  109. package/dist/golden-tests/index.js.map +1 -1
  110. package/dist/golden-tests/runner.d.ts.map +1 -1
  111. package/dist/golden-tests/runner.js +6 -7
  112. package/dist/golden-tests/runner.js.map +1 -1
  113. package/dist/golden-tests/types.d.ts +0 -7
  114. package/dist/golden-tests/types.d.ts.map +1 -1
  115. package/dist/golden.test.d.ts +3 -10
  116. package/dist/golden.test.d.ts.map +1 -1
  117. package/dist/golden.test.js +8 -24
  118. package/dist/golden.test.js.map +1 -1
  119. package/dist/hierarchical-bindings.test.js +18 -12
  120. package/dist/hierarchical-bindings.test.js.map +1 -1
  121. package/dist/integration.test.js +76 -35
  122. package/dist/integration.test.js.map +1 -1
  123. package/dist/invariants/emitter-globals-subset.test.d.ts +1 -1
  124. package/dist/invariants/emitter-globals-subset.test.js +34 -74
  125. package/dist/invariants/emitter-globals-subset.test.js.map +1 -1
  126. package/dist/invariants/numeric-proof-contract.test.js +3 -3
  127. package/dist/invariants/numeric-proof-contract.test.js.map +1 -1
  128. package/dist/naming-policy.d.ts +5 -0
  129. package/dist/naming-policy.d.ts.map +1 -0
  130. package/dist/naming-policy.js +10 -0
  131. package/dist/naming-policy.js.map +1 -0
  132. package/dist/patterns.d.ts +98 -0
  133. package/dist/patterns.d.ts.map +1 -0
  134. package/dist/patterns.js +366 -0
  135. package/dist/patterns.js.map +1 -0
  136. package/dist/patterns.test.d.ts +15 -0
  137. package/dist/patterns.test.d.ts.map +1 -0
  138. package/dist/patterns.test.js +1262 -0
  139. package/dist/patterns.test.js.map +1 -0
  140. package/dist/specialization/generation.d.ts.map +1 -1
  141. package/dist/specialization/generation.js +2 -2
  142. package/dist/specialization/generation.js.map +1 -1
  143. package/dist/specialization/generic-classes.test.js +1 -1
  144. package/dist/specialization/generic-functions.test.js +6 -6
  145. package/dist/specialization/interfaces.test.js +5 -5
  146. package/dist/specialization/substitution.d.ts.map +1 -1
  147. package/dist/specialization/substitution.js +4 -0
  148. package/dist/specialization/substitution.js.map +1 -1
  149. package/dist/specialization/type-aliases.test.js +6 -6
  150. package/dist/specialization/type-aliases.test.js.map +1 -1
  151. package/dist/statement-emitter.d.ts.map +1 -1
  152. package/dist/statement-emitter.js +1 -1
  153. package/dist/statement-emitter.js.map +1 -1
  154. package/dist/statements/blocks.d.ts.map +1 -1
  155. package/dist/statements/blocks.js +14 -45
  156. package/dist/statements/blocks.js.map +1 -1
  157. package/dist/statements/classes/index.d.ts +1 -1
  158. package/dist/statements/classes/index.d.ts.map +1 -1
  159. package/dist/statements/classes/index.js +1 -1
  160. package/dist/statements/classes/index.js.map +1 -1
  161. package/dist/statements/classes/inline-types.d.ts +1 -1
  162. package/dist/statements/classes/inline-types.d.ts.map +1 -1
  163. package/dist/statements/classes/inline-types.js +15 -5
  164. package/dist/statements/classes/inline-types.js.map +1 -1
  165. package/dist/statements/classes/members/constructors.d.ts.map +1 -1
  166. package/dist/statements/classes/members/constructors.js +40 -14
  167. package/dist/statements/classes/members/constructors.js.map +1 -1
  168. package/dist/statements/classes/members/methods.d.ts.map +1 -1
  169. package/dist/statements/classes/members/methods.js +62 -25
  170. package/dist/statements/classes/members/methods.js.map +1 -1
  171. package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
  172. package/dist/statements/classes/members/orchestrator.js +1 -3
  173. package/dist/statements/classes/members/orchestrator.js.map +1 -1
  174. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  175. package/dist/statements/classes/members/properties.js +70 -10
  176. package/dist/statements/classes/members/properties.js.map +1 -1
  177. package/dist/statements/classes/parameters.d.ts +43 -1
  178. package/dist/statements/classes/parameters.d.ts.map +1 -1
  179. package/dist/statements/classes/parameters.js +73 -13
  180. package/dist/statements/classes/parameters.js.map +1 -1
  181. package/dist/statements/classes/properties.d.ts.map +1 -1
  182. package/dist/statements/classes/properties.js +6 -7
  183. package/dist/statements/classes/properties.js.map +1 -1
  184. package/dist/statements/classes.d.ts +1 -1
  185. package/dist/statements/classes.d.ts.map +1 -1
  186. package/dist/statements/classes.js +1 -1
  187. package/dist/statements/classes.js.map +1 -1
  188. package/dist/statements/control/conditionals.d.ts.map +1 -1
  189. package/dist/statements/control/conditionals.js +193 -23
  190. package/dist/statements/control/conditionals.js.map +1 -1
  191. package/dist/statements/control/loops.d.ts.map +1 -1
  192. package/dist/statements/control/loops.js +25 -5
  193. package/dist/statements/control/loops.js.map +1 -1
  194. package/dist/statements/declarations/classes.d.ts.map +1 -1
  195. package/dist/statements/declarations/classes.js +150 -12
  196. package/dist/statements/declarations/classes.js.map +1 -1
  197. package/dist/statements/declarations/enums.d.ts.map +1 -1
  198. package/dist/statements/declarations/enums.js +2 -1
  199. package/dist/statements/declarations/enums.js.map +1 -1
  200. package/dist/statements/declarations/functions.d.ts.map +1 -1
  201. package/dist/statements/declarations/functions.js +44 -19
  202. package/dist/statements/declarations/functions.js.map +1 -1
  203. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  204. package/dist/statements/declarations/interfaces.js +71 -10
  205. package/dist/statements/declarations/interfaces.js.map +1 -1
  206. package/dist/statements/declarations/structs.test.js +5 -5
  207. package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
  208. package/dist/statements/declarations/type-aliases.js +24 -5
  209. package/dist/statements/declarations/type-aliases.js.map +1 -1
  210. package/dist/statements/declarations/variables.d.ts.map +1 -1
  211. package/dist/statements/declarations/variables.js +194 -37
  212. package/dist/statements/declarations/variables.js.map +1 -1
  213. package/dist/statements/index.test.js +7 -5
  214. package/dist/statements/index.test.js.map +1 -1
  215. package/dist/type-assertion.test.js +1 -1
  216. package/dist/types/arrays.d.ts +3 -9
  217. package/dist/types/arrays.d.ts.map +1 -1
  218. package/dist/types/arrays.js +5 -19
  219. package/dist/types/arrays.js.map +1 -1
  220. package/dist/types/emitter.d.ts.map +1 -1
  221. package/dist/types/emitter.js +3 -2
  222. package/dist/types/emitter.js.map +1 -1
  223. package/dist/types/index.test.js +3 -3
  224. package/dist/types/parameters.d.ts +1 -1
  225. package/dist/types/parameters.d.ts.map +1 -1
  226. package/dist/types/parameters.js +77 -8
  227. package/dist/types/parameters.js.map +1 -1
  228. package/dist/types/parameters.test.js +1 -1
  229. package/dist/types/parameters.test.js.map +1 -1
  230. package/dist/types/references.d.ts.map +1 -1
  231. package/dist/types/references.js +126 -55
  232. package/dist/types/references.js.map +1 -1
  233. package/dist/types/references.test.js +46 -106
  234. package/dist/types/references.test.js.map +1 -1
  235. package/dist/types/unions.d.ts.map +1 -1
  236. package/dist/types/unions.js +20 -0
  237. package/dist/types/unions.js.map +1 -1
  238. package/dist/types/unions.test.js +9 -9
  239. package/dist/types.d.ts +1 -1
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/types.js.map +1 -1
  242. package/package.json +3 -3
@@ -0,0 +1,4 @@
1
+ import type { Diagnostic, IrModule } from "@tsonic/frontend";
2
+ import { type NamingPolicyConfig } from "@tsonic/frontend";
3
+ export declare const validateNamingPolicyCollisions: (modules: readonly IrModule[], namingPolicy: NamingPolicyConfig | undefined) => readonly Diagnostic[];
4
+ //# sourceMappingURL=naming-collisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-collisions.d.ts","sourceRoot":"","sources":["../../src/core/naming-collisions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAe,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAkG1B,eAAO,MAAM,8BAA8B,GACzC,SAAS,SAAS,QAAQ,EAAE,EAC5B,cAAc,kBAAkB,GAAG,SAAS,KAC3C,SAAS,UAAU,EAqKrB,CAAC"}
@@ -0,0 +1,191 @@
1
+ import { applyNamingPolicy, resolveNamingPolicy, } from "@tsonic/frontend";
2
+ import { escapeCSharpIdentifier } from "../emitter-types/index.js";
3
+ const getCSharpIdentifier = (original, bucket, namingPolicy) => {
4
+ const policy = resolveNamingPolicy(namingPolicy, bucket);
5
+ return escapeCSharpIdentifier(applyNamingPolicy(original, policy));
6
+ };
7
+ const addCollisionDiagnostics = (diagnostics, items, scope) => {
8
+ const byCsharp = new Map();
9
+ for (const item of items) {
10
+ const existing = byCsharp.get(item.csharp) ?? [];
11
+ byCsharp.set(item.csharp, [...existing, item]);
12
+ }
13
+ for (const [csharp, group] of byCsharp) {
14
+ const originalNames = [...new Set(group.map((g) => g.original))];
15
+ if (originalNames.length <= 1)
16
+ continue;
17
+ const details = [...group]
18
+ .sort((a, b) => a.original === b.original
19
+ ? a.kind.localeCompare(b.kind)
20
+ : a.original.localeCompare(b.original))
21
+ .map((g) => `${g.original} (${g.kind})`)
22
+ .join(", ");
23
+ diagnostics.push({
24
+ code: "TSN3003",
25
+ severity: "error",
26
+ message: `Naming policy collision in ${scope}: ` +
27
+ `${details} all map to C# identifier '${csharp}'. ` +
28
+ `Rename one declaration or set namingPolicy.all = \"none\" to preserve source casing.`,
29
+ });
30
+ }
31
+ };
32
+ const collectInlineTypeNames = (stmt, namingPolicy) => {
33
+ const items = [];
34
+ for (const member of stmt.members) {
35
+ if (member.kind !== "propertySignature")
36
+ continue;
37
+ if (member.type?.kind !== "objectType")
38
+ continue;
39
+ items.push({
40
+ original: `${stmt.name}.${member.name}`,
41
+ csharp: getCSharpIdentifier(member.name, "classes", namingPolicy),
42
+ kind: "inlineType",
43
+ });
44
+ }
45
+ return items;
46
+ };
47
+ const collectContainerNameItem = (module) => {
48
+ const hasTypeCollision = module.body.some((s) => (s.kind === "classDeclaration" || s.kind === "interfaceDeclaration") &&
49
+ s.name === module.className);
50
+ // The container is only emitted when there are static members.
51
+ const hasStaticMembers = module.body.some((s) => s.kind !== "classDeclaration" && s.kind !== "interfaceDeclaration");
52
+ if (!hasStaticMembers)
53
+ return undefined;
54
+ const base = escapeCSharpIdentifier(module.className);
55
+ const csharp = hasTypeCollision ? `${base}__Module` : base;
56
+ return {
57
+ original: module.className,
58
+ csharp,
59
+ kind: "moduleContainer",
60
+ };
61
+ };
62
+ export const validateNamingPolicyCollisions = (modules, namingPolicy) => {
63
+ const diagnostics = [];
64
+ for (const module of modules) {
65
+ const fileLabel = module.filePath;
66
+ // ---------------------------------------------------------------------
67
+ // Module-level values (static container fields/methods)
68
+ // ---------------------------------------------------------------------
69
+ const moduleValueItems = [];
70
+ for (const stmt of module.body) {
71
+ if (stmt.kind === "functionDeclaration") {
72
+ moduleValueItems.push({
73
+ original: stmt.name,
74
+ csharp: getCSharpIdentifier(stmt.name, "methods", namingPolicy),
75
+ kind: "function",
76
+ });
77
+ continue;
78
+ }
79
+ if (stmt.kind === "variableDeclaration") {
80
+ for (const decl of stmt.declarations) {
81
+ if (decl.name.kind !== "identifierPattern")
82
+ continue;
83
+ moduleValueItems.push({
84
+ original: decl.name.name,
85
+ csharp: getCSharpIdentifier(decl.name.name, "fields", namingPolicy),
86
+ kind: "variable",
87
+ });
88
+ }
89
+ }
90
+ }
91
+ addCollisionDiagnostics(diagnostics, moduleValueItems, `module values (${fileLabel})`);
92
+ // ---------------------------------------------------------------------
93
+ // Namespace-level types (classes/interfaces) + generated inline types + container name
94
+ // ---------------------------------------------------------------------
95
+ const namespaceTypeItems = [];
96
+ for (const stmt of module.body) {
97
+ if (stmt.kind === "classDeclaration") {
98
+ namespaceTypeItems.push({
99
+ original: stmt.name,
100
+ csharp: escapeCSharpIdentifier(stmt.name),
101
+ kind: "class",
102
+ });
103
+ continue;
104
+ }
105
+ if (stmt.kind === "interfaceDeclaration") {
106
+ namespaceTypeItems.push({
107
+ original: stmt.name,
108
+ csharp: escapeCSharpIdentifier(stmt.name),
109
+ kind: "interface",
110
+ });
111
+ namespaceTypeItems.push(...collectInlineTypeNames(stmt, namingPolicy));
112
+ }
113
+ }
114
+ const container = collectContainerNameItem(module);
115
+ if (container) {
116
+ namespaceTypeItems.push(container);
117
+ }
118
+ addCollisionDiagnostics(diagnostics, namespaceTypeItems, `namespace types (${fileLabel})`);
119
+ // ---------------------------------------------------------------------
120
+ // Type member collisions (per declaration)
121
+ // ---------------------------------------------------------------------
122
+ for (const stmt of module.body) {
123
+ if (stmt.kind === "classDeclaration") {
124
+ const items = [];
125
+ for (const m of stmt.members) {
126
+ if (m.kind === "methodDeclaration") {
127
+ items.push({
128
+ original: m.name,
129
+ csharp: getCSharpIdentifier(m.name, "methods", namingPolicy),
130
+ kind: "method",
131
+ });
132
+ continue;
133
+ }
134
+ if (m.kind === "propertyDeclaration") {
135
+ const hasAccessors = !!(m.getterBody || m.setterBody);
136
+ const bucket = hasAccessors
137
+ ? "properties"
138
+ : "fields";
139
+ items.push({
140
+ original: m.name,
141
+ csharp: getCSharpIdentifier(m.name, bucket, namingPolicy),
142
+ kind: hasAccessors ? "property" : "field",
143
+ });
144
+ }
145
+ }
146
+ addCollisionDiagnostics(diagnostics, items, `class ${stmt.name} members (${fileLabel})`);
147
+ continue;
148
+ }
149
+ if (stmt.kind === "interfaceDeclaration") {
150
+ const items = [];
151
+ for (const m of stmt.members) {
152
+ if (m.kind === "methodSignature") {
153
+ items.push({
154
+ original: m.name,
155
+ csharp: getCSharpIdentifier(m.name, "methods", namingPolicy),
156
+ kind: "method",
157
+ });
158
+ continue;
159
+ }
160
+ // propertySignature
161
+ items.push({
162
+ original: m.name,
163
+ csharp: getCSharpIdentifier(m.name, "properties", namingPolicy),
164
+ kind: "property",
165
+ });
166
+ }
167
+ addCollisionDiagnostics(diagnostics, items, `interface ${stmt.name} members (${fileLabel})`);
168
+ continue;
169
+ }
170
+ if (stmt.kind === "enumDeclaration") {
171
+ const items = stmt.members.map((m) => ({
172
+ original: m.name,
173
+ csharp: getCSharpIdentifier(m.name, "enumMembers", namingPolicy),
174
+ kind: "enumMember",
175
+ }));
176
+ addCollisionDiagnostics(diagnostics, items, `enum ${stmt.name} members (${fileLabel})`);
177
+ continue;
178
+ }
179
+ if (stmt.kind === "typeAliasDeclaration" && stmt.type.kind === "objectType") {
180
+ const items = stmt.type.members.map((m) => ({
181
+ original: m.name,
182
+ csharp: getCSharpIdentifier(m.name, "properties", namingPolicy),
183
+ kind: m.kind === "methodSignature" ? "method" : "property",
184
+ }));
185
+ addCollisionDiagnostics(diagnostics, items, `type ${stmt.name} members (${fileLabel})`);
186
+ }
187
+ }
188
+ }
189
+ return diagnostics;
190
+ };
191
+ //# sourceMappingURL=naming-collisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-collisions.js","sourceRoot":"","sources":["../../src/core/naming-collisions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { IrModule } from "@tsonic/frontend";
2
+ import type { TypeMemberIndex } from "../emitter-types/core.js";
3
+ export declare const buildTypeMemberIndex: (modules: readonly IrModule[]) => TypeMemberIndex;
4
+ //# sourceMappingURL=type-member-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-member-index.d.ts","sourceRoot":"","sources":["../../src/core/type-member-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAUlC,eAAO,MAAM,oBAAoB,GAC/B,SAAS,SAAS,QAAQ,EAAE,KAC3B,eAqEF,CAAC"}
@@ -0,0 +1,62 @@
1
+ const setMemberKind = (map, memberName, kind) => {
2
+ map.set(memberName, kind);
3
+ };
4
+ export const buildTypeMemberIndex = (modules) => {
5
+ const index = new Map();
6
+ const indexInterfaceMembers = (typeFqn, members) => {
7
+ const map = index.get(typeFqn) ?? new Map();
8
+ for (const member of members) {
9
+ if (member.kind === "methodSignature") {
10
+ setMemberKind(map, member.name, "method");
11
+ }
12
+ else {
13
+ // propertySignature
14
+ setMemberKind(map, member.name, "property");
15
+ }
16
+ }
17
+ index.set(typeFqn, map);
18
+ };
19
+ for (const module of modules) {
20
+ const ns = module.namespace;
21
+ for (const stmt of module.body) {
22
+ const typeFqnBase = `${ns}.`;
23
+ if (stmt.kind === "classDeclaration") {
24
+ const typeFqn = `${typeFqnBase}${stmt.name}`;
25
+ const map = index.get(typeFqn) ?? new Map();
26
+ for (const member of stmt.members) {
27
+ if (member.kind === "methodDeclaration") {
28
+ setMemberKind(map, member.name, "method");
29
+ }
30
+ else if (member.kind === "propertyDeclaration") {
31
+ const hasAccessors = !!(member.getterBody || member.setterBody);
32
+ setMemberKind(map, member.name, hasAccessors ? "property" : "field");
33
+ }
34
+ }
35
+ index.set(typeFqn, map);
36
+ continue;
37
+ }
38
+ if (stmt.kind === "interfaceDeclaration") {
39
+ const typeFqn = `${typeFqnBase}${stmt.name}`;
40
+ indexInterfaceMembers(typeFqn, stmt.members);
41
+ continue;
42
+ }
43
+ if (stmt.kind === "enumDeclaration") {
44
+ const typeFqn = `${typeFqnBase}${stmt.name}`;
45
+ const map = index.get(typeFqn) ?? new Map();
46
+ for (const member of stmt.members) {
47
+ setMemberKind(map, member.name, "enumMember");
48
+ }
49
+ index.set(typeFqn, map);
50
+ continue;
51
+ }
52
+ if (stmt.kind === "typeAliasDeclaration") {
53
+ if (stmt.type.kind !== "objectType")
54
+ continue;
55
+ const typeFqn = `${typeFqnBase}${stmt.name}__Alias`;
56
+ indexInterfaceMembers(typeFqn, stmt.type.members);
57
+ }
58
+ }
59
+ }
60
+ return index;
61
+ };
62
+ //# sourceMappingURL=type-member-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-member-index.js","sourceRoot":"","sources":["../../src/core/type-member-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Unsafe feature detection (pointers)
3
+ *
4
+ * Used to decide when to emit `unsafe` modifiers in generated C#.
5
+ */
6
+ import type { IrExpression, IrStatement, IrType, IrModule } from "@tsonic/frontend";
7
+ export declare const typeUsesPointer: (type: IrType | undefined) => boolean;
8
+ export declare const expressionUsesPointer: (expr: IrExpression | undefined) => boolean;
9
+ export declare const statementUsesPointer: (stmt: IrStatement) => boolean;
10
+ export declare const moduleUsesPointer: (module: IrModule) => boolean;
11
+ //# sourceMappingURL=unsafe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsafe.d.ts","sourceRoot":"","sources":["../../src/core/unsafe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,WAAW,EACX,MAAM,EAIN,QAAQ,EACT,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,GAAG,SAAS,KAAG,OAiD1D,CAAC;AA4DF,eAAO,MAAM,qBAAqB,GAChC,MAAM,YAAY,GAAG,SAAS,KAC7B,OA8HF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,WAAW,KAAG,OAwGxD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,QAAQ,KAAG,OAKpD,CAAC"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Unsafe feature detection (pointers)
3
+ *
4
+ * Used to decide when to emit `unsafe` modifiers in generated C#.
5
+ */
6
+ export const typeUsesPointer = (type) => {
7
+ if (!type)
8
+ return false;
9
+ switch (type.kind) {
10
+ case "referenceType": {
11
+ if (type.name === "ptr")
12
+ return true;
13
+ if (type.typeArguments && type.typeArguments.length > 0) {
14
+ return type.typeArguments.some((t) => typeUsesPointer(t));
15
+ }
16
+ if (type.structuralMembers && type.structuralMembers.length > 0) {
17
+ return interfaceMembersUsePointer(type.structuralMembers);
18
+ }
19
+ return false;
20
+ }
21
+ case "arrayType":
22
+ return typeUsesPointer(type.elementType);
23
+ case "dictionaryType":
24
+ return (typeUsesPointer(type.keyType) ||
25
+ typeUsesPointer(type.valueType));
26
+ case "tupleType":
27
+ return type.elementTypes.some((t) => typeUsesPointer(t));
28
+ case "functionType":
29
+ return (type.parameters.some((p) => typeUsesPointer(p.type)) ||
30
+ typeUsesPointer(type.returnType));
31
+ case "objectType":
32
+ return interfaceMembersUsePointer(type.members);
33
+ case "unionType":
34
+ case "intersectionType":
35
+ return type.types.some((t) => typeUsesPointer(t));
36
+ case "typeParameterType":
37
+ case "primitiveType":
38
+ case "literalType":
39
+ case "anyType":
40
+ case "unknownType":
41
+ case "voidType":
42
+ case "neverType":
43
+ return false;
44
+ }
45
+ };
46
+ const interfaceMembersUsePointer = (members) => {
47
+ for (const member of members) {
48
+ if (member.kind === "propertySignature") {
49
+ if (typeUsesPointer(member.type))
50
+ return true;
51
+ continue;
52
+ }
53
+ if (member.kind === "methodSignature") {
54
+ if (member.parameters.some((p) => typeUsesPointer(p.type)))
55
+ return true;
56
+ if (typeUsesPointer(member.returnType))
57
+ return true;
58
+ continue;
59
+ }
60
+ }
61
+ return false;
62
+ };
63
+ const classMembersUsePointer = (members) => {
64
+ for (const member of members) {
65
+ if (member.kind === "propertyDeclaration") {
66
+ if (typeUsesPointer(member.type))
67
+ return true;
68
+ if (expressionUsesPointer(member.initializer))
69
+ return true;
70
+ continue;
71
+ }
72
+ if (member.kind === "methodDeclaration") {
73
+ if (typeUsesPointer(member.returnType))
74
+ return true;
75
+ if (parametersUsePointer(member.parameters))
76
+ return true;
77
+ if (member.body && statementUsesPointer(member.body))
78
+ return true;
79
+ continue;
80
+ }
81
+ if (member.kind === "constructorDeclaration") {
82
+ if (parametersUsePointer(member.parameters))
83
+ return true;
84
+ if (member.body && statementUsesPointer(member.body))
85
+ return true;
86
+ continue;
87
+ }
88
+ }
89
+ return false;
90
+ };
91
+ const parametersUsePointer = (params) => params.some((p) => typeUsesPointer(p.type));
92
+ const variableDeclaratorsUsePointer = (decls) => {
93
+ for (const decl of decls) {
94
+ if (typeUsesPointer(decl.type))
95
+ return true;
96
+ if (expressionUsesPointer(decl.initializer))
97
+ return true;
98
+ }
99
+ return false;
100
+ };
101
+ export const expressionUsesPointer = (expr) => {
102
+ if (!expr)
103
+ return false;
104
+ switch (expr.kind) {
105
+ case "typeAssertion":
106
+ return (expressionUsesPointer(expr.expression) ||
107
+ typeUsesPointer(expr.targetType));
108
+ case "trycast":
109
+ return (expressionUsesPointer(expr.expression) ||
110
+ typeUsesPointer(expr.targetType));
111
+ case "stackalloc":
112
+ return (typeUsesPointer(expr.elementType) ||
113
+ expressionUsesPointer(expr.size) ||
114
+ typeUsesPointer(expr.inferredType));
115
+ case "call": {
116
+ if (expressionUsesPointer(expr.callee))
117
+ return true;
118
+ if (expr.typeArguments?.some((t) => typeUsesPointer(t)))
119
+ return true;
120
+ if (expr.parameterTypes?.some((t) => typeUsesPointer(t)))
121
+ return true;
122
+ if (expr.narrowing && typeUsesPointer(expr.narrowing.targetType))
123
+ return true;
124
+ for (const arg of expr.arguments) {
125
+ if (arg.kind === "spread") {
126
+ if (expressionUsesPointer(arg.expression))
127
+ return true;
128
+ continue;
129
+ }
130
+ if (expressionUsesPointer(arg))
131
+ return true;
132
+ }
133
+ return false;
134
+ }
135
+ case "new":
136
+ return (expressionUsesPointer(expr.callee) ||
137
+ (expr.typeArguments?.some((t) => typeUsesPointer(t)) ?? false) ||
138
+ expr.arguments.some((a) => a.kind === "spread" ? expressionUsesPointer(a.expression) : expressionUsesPointer(a)));
139
+ case "memberAccess":
140
+ return (expressionUsesPointer(expr.object) ||
141
+ (expr.isComputed && typeof expr.property !== "string"
142
+ ? expressionUsesPointer(expr.property)
143
+ : false));
144
+ case "array":
145
+ return expr.elements.some((e) => e === undefined
146
+ ? false
147
+ : e.kind === "spread"
148
+ ? expressionUsesPointer(e.expression)
149
+ : expressionUsesPointer(e));
150
+ case "object":
151
+ return expr.properties.some((p) => p.kind === "spread"
152
+ ? expressionUsesPointer(p.expression)
153
+ : expressionUsesPointer(p.value) ||
154
+ (typeof p.key === "string" ? false : expressionUsesPointer(p.key)));
155
+ case "functionExpression":
156
+ return (parametersUsePointer(expr.parameters) ||
157
+ typeUsesPointer(expr.returnType) ||
158
+ statementUsesPointer(expr.body));
159
+ case "arrowFunction":
160
+ return (parametersUsePointer(expr.parameters) ||
161
+ typeUsesPointer(expr.returnType) ||
162
+ (expr.body.kind === "blockStatement"
163
+ ? statementUsesPointer(expr.body)
164
+ : expressionUsesPointer(expr.body)));
165
+ case "assignment":
166
+ return (("kind" in expr.left
167
+ ? expressionUsesPointer(expr.left)
168
+ : false) || expressionUsesPointer(expr.right));
169
+ case "binary":
170
+ case "logical":
171
+ return (expressionUsesPointer(expr.left) || expressionUsesPointer(expr.right));
172
+ case "unary":
173
+ case "update":
174
+ case "await":
175
+ case "spread":
176
+ case "numericNarrowing":
177
+ return expressionUsesPointer(expr.expression);
178
+ case "conditional":
179
+ return (expressionUsesPointer(expr.condition) ||
180
+ expressionUsesPointer(expr.whenTrue) ||
181
+ expressionUsesPointer(expr.whenFalse));
182
+ case "yield":
183
+ return expressionUsesPointer(expr.expression);
184
+ case "templateLiteral":
185
+ return expr.expressions.some((e) => expressionUsesPointer(e));
186
+ case "identifier":
187
+ case "literal":
188
+ case "this":
189
+ return false;
190
+ }
191
+ };
192
+ export const statementUsesPointer = (stmt) => {
193
+ switch (stmt.kind) {
194
+ case "variableDeclaration":
195
+ return variableDeclaratorsUsePointer(stmt.declarations);
196
+ case "functionDeclaration":
197
+ return (parametersUsePointer(stmt.parameters) ||
198
+ typeUsesPointer(stmt.returnType) ||
199
+ statementUsesPointer(stmt.body));
200
+ case "classDeclaration":
201
+ return (typeUsesPointer(stmt.superClass) ||
202
+ stmt.implements.some((t) => typeUsesPointer(t)) ||
203
+ classMembersUsePointer(stmt.members));
204
+ case "interfaceDeclaration":
205
+ return ((stmt.extends?.some((t) => typeUsesPointer(t)) ?? false) ||
206
+ interfaceMembersUsePointer(stmt.members));
207
+ case "typeAliasDeclaration":
208
+ return typeUsesPointer(stmt.type);
209
+ case "enumDeclaration":
210
+ case "emptyStatement":
211
+ case "breakStatement":
212
+ case "continueStatement":
213
+ return false;
214
+ case "expressionStatement":
215
+ return expressionUsesPointer(stmt.expression);
216
+ case "returnStatement":
217
+ return expressionUsesPointer(stmt.expression);
218
+ case "ifStatement":
219
+ return (expressionUsesPointer(stmt.condition) ||
220
+ statementUsesPointer(stmt.thenStatement) ||
221
+ (stmt.elseStatement ? statementUsesPointer(stmt.elseStatement) : false));
222
+ case "whileStatement":
223
+ return (expressionUsesPointer(stmt.condition) ||
224
+ statementUsesPointer(stmt.body));
225
+ case "forStatement": {
226
+ const initUsesPointer = stmt.initializer
227
+ ? stmt.initializer.kind === "variableDeclaration"
228
+ ? variableDeclaratorsUsePointer(stmt.initializer.declarations)
229
+ : expressionUsesPointer(stmt.initializer)
230
+ : false;
231
+ return (initUsesPointer ||
232
+ expressionUsesPointer(stmt.condition) ||
233
+ expressionUsesPointer(stmt.update) ||
234
+ statementUsesPointer(stmt.body));
235
+ }
236
+ case "forOfStatement":
237
+ return (expressionUsesPointer(stmt.expression) ||
238
+ statementUsesPointer(stmt.body));
239
+ case "switchStatement":
240
+ return (expressionUsesPointer(stmt.expression) ||
241
+ stmt.cases.some((c) => expressionUsesPointer(c.test) ||
242
+ c.statements.some((s) => statementUsesPointer(s))));
243
+ case "throwStatement":
244
+ return expressionUsesPointer(stmt.expression);
245
+ case "tryStatement":
246
+ return (statementUsesPointer(stmt.tryBlock) ||
247
+ (stmt.catchClause ? statementUsesPointer(stmt.catchClause.body) : false) ||
248
+ (stmt.finallyBlock ? statementUsesPointer(stmt.finallyBlock) : false));
249
+ case "blockStatement":
250
+ return stmt.statements.some((s) => statementUsesPointer(s));
251
+ case "yieldStatement":
252
+ return (expressionUsesPointer(stmt.output) || typeUsesPointer(stmt.receivedType));
253
+ case "generatorReturnStatement":
254
+ return expressionUsesPointer(stmt.expression);
255
+ }
256
+ };
257
+ export const moduleUsesPointer = (module) => {
258
+ for (const stmt of module.body) {
259
+ if (statementUsesPointer(stmt))
260
+ return true;
261
+ }
262
+ return false;
263
+ };
264
+ //# sourceMappingURL=unsafe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsafe.js","sourceRoot":"","sources":["../../src/core/unsafe.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ export declare const withClassName: (context: EmitterContext, className: string)
30
30
  * Scoped fields that should be restored after emission.
31
31
  * These fields define lexical scopes and should not leak to parent scopes.
32
32
  */
33
- type ScopedFields = Pick<EmitterContext, "typeParameters" | "returnType">;
33
+ type ScopedFields = Pick<EmitterContext, "typeParameters" | "typeParamConstraints" | "typeParameterNameMap" | "returnType" | "localNameMap">;
34
34
  /**
35
35
  * Execute an emission function with scoped context fields.
36
36
  *
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/emitter-types/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAO3D;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,cAAc,KAAG,cA+CvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,cAAc,KAAG,cAG/C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,cAAc,KAAG,cAG/C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU,GACrB,SAAS,cAAc,EACvB,UAAU,OAAO,KAChB,cAGD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,SAAS,cAAc,EACvB,SAAS,OAAO,KACf,cAGD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,cAAc,EACvB,WAAW,MAAM,KAChB,cAGD,CAAC;AAEH;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAC1B,SAAS,cAAc,EACvB,aAAa,OAAO,CAAC,YAAY,CAAC,EAClC,MAAM,CAAC,GAAG,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KACjD,CAAC,CAAC,EAAE,cAAc,CAoBpB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/emitter-types/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAO3D;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,cAAc,KAAG,cA2CvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,cAAc,KAAG,cAG/C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,cAAc,KAAG,cAG/C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU,GACrB,SAAS,cAAc,EACvB,UAAU,OAAO,KAChB,cAGD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,SAAS,cAAc,EACvB,SAAS,OAAO,KACf,cAGD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,cAAc,EACvB,WAAW,MAAM,KAChB,cAGD,CAAC;AAEH;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CACtB,cAAc,EACZ,gBAAgB,GAChB,sBAAsB,GACtB,sBAAsB,GACtB,YAAY,GACZ,cAAc,CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAC1B,SAAS,cAAc,EACvB,aAAa,OAAO,CAAC,YAAY,CAAC,EAClC,MAAM,CAAC,GAAG,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KACjD,CAAC,CAAC,EAAE,cAAc,CAuBpB,CAAC"}
@@ -36,9 +36,8 @@ export const createContext = (options) => {
36
36
  bindingsRegistry = buildBindingsRegistry(librariesResult.value.bindings);
37
37
  }
38
38
  else {
39
- // TODO: Report diagnostics from librariesResult.error
40
- // Need to integrate diagnostic reporting infrastructure
41
- console.warn("[Tsonic] Failed to load libraries:", librariesResult.error.map((d) => d.message).join(", "));
39
+ const message = librariesResult.error.map((d) => d.message).join(", ");
40
+ throw new Error(`[Tsonic] Failed to load libraries: ${message}`);
42
41
  }
43
42
  }
44
43
  return {
@@ -111,7 +110,10 @@ export const withScoped = (context, scopedPatch, emit) => {
111
110
  // Save current scoped field values
112
111
  const saved = {
113
112
  typeParameters: context.typeParameters,
113
+ typeParamConstraints: context.typeParamConstraints,
114
+ typeParameterNameMap: context.typeParameterNameMap,
114
115
  returnType: context.returnType,
116
+ localNameMap: context.localNameMap,
115
117
  };
116
118
  // Create child context with scoped patch applied
117
119
  const childContext = { ...context, ...scopedPatch };