@tsonic/emitter 0.0.6 → 0.0.13

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 (223) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/array.test.js +5 -5
  3. package/dist/array.test.js.map +1 -1
  4. package/dist/core/attributes.d.ts +43 -0
  5. package/dist/core/attributes.d.ts.map +1 -0
  6. package/dist/core/attributes.js +128 -0
  7. package/dist/core/attributes.js.map +1 -0
  8. package/dist/core/attributes.test.d.ts +5 -0
  9. package/dist/core/attributes.test.d.ts.map +1 -0
  10. package/dist/core/attributes.test.js +296 -0
  11. package/dist/core/attributes.test.js.map +1 -0
  12. package/dist/core/imports.test.js +6 -3
  13. package/dist/core/imports.test.js.map +1 -1
  14. package/dist/core/index.d.ts +2 -0
  15. package/dist/core/index.d.ts.map +1 -1
  16. package/dist/core/index.js +2 -0
  17. package/dist/core/index.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 +50 -1
  20. package/dist/core/module-emitter/static-container.js.map +1 -1
  21. package/dist/core/module-emitter.test.js +2 -1
  22. package/dist/core/module-emitter.test.js.map +1 -1
  23. package/dist/core/module-map.d.ts.map +1 -1
  24. package/dist/core/module-map.js +5 -1
  25. package/dist/core/module-map.js.map +1 -1
  26. package/dist/core/module-map.test.d.ts +8 -0
  27. package/dist/core/module-map.test.d.ts.map +1 -0
  28. package/dist/core/module-map.test.js +94 -0
  29. package/dist/core/module-map.test.js.map +1 -0
  30. package/dist/core/type-compatibility.d.ts +31 -0
  31. package/dist/core/type-compatibility.d.ts.map +1 -0
  32. package/dist/core/type-compatibility.js +99 -0
  33. package/dist/core/type-compatibility.js.map +1 -0
  34. package/dist/core/type-resolution.d.ts +83 -3
  35. package/dist/core/type-resolution.d.ts.map +1 -1
  36. package/dist/core/type-resolution.js +262 -4
  37. package/dist/core/type-resolution.js.map +1 -1
  38. package/dist/core/type-resolution.test.js +110 -1
  39. package/dist/core/type-resolution.test.js.map +1 -1
  40. package/dist/emitter-types/context.d.ts.map +1 -1
  41. package/dist/emitter-types/context.js +21 -1
  42. package/dist/emitter-types/context.js.map +1 -1
  43. package/dist/emitter-types/core.d.ts +26 -0
  44. package/dist/emitter-types/core.d.ts.map +1 -1
  45. package/dist/emitter-types/identifiers.d.ts.map +1 -1
  46. package/dist/emitter-types/identifiers.js +4 -43
  47. package/dist/emitter-types/identifiers.js.map +1 -1
  48. package/dist/emitter-types/index.d.ts +1 -1
  49. package/dist/emitter-types/index.d.ts.map +1 -1
  50. package/dist/emitter-types/index.js.map +1 -1
  51. package/dist/emitter.d.ts.map +1 -1
  52. package/dist/emitter.js +47 -1
  53. package/dist/emitter.js.map +1 -1
  54. package/dist/expression-emitter.d.ts.map +1 -1
  55. package/dist/expression-emitter.js +51 -3
  56. package/dist/expression-emitter.js.map +1 -1
  57. package/dist/expressions/access.d.ts.map +1 -1
  58. package/dist/expressions/access.js +138 -23
  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 +90 -13
  62. package/dist/expressions/calls.js.map +1 -1
  63. package/dist/expressions/collections.d.ts +3 -2
  64. package/dist/expressions/collections.d.ts.map +1 -1
  65. package/dist/expressions/collections.js +251 -52
  66. package/dist/expressions/collections.js.map +1 -1
  67. package/dist/expressions/functions.d.ts +2 -2
  68. package/dist/expressions/functions.d.ts.map +1 -1
  69. package/dist/expressions/functions.js +81 -38
  70. package/dist/expressions/functions.js.map +1 -1
  71. package/dist/expressions/identifiers.d.ts.map +1 -1
  72. package/dist/expressions/identifiers.js +28 -7
  73. package/dist/expressions/identifiers.js.map +1 -1
  74. package/dist/expressions/index.test.js +191 -4
  75. package/dist/expressions/index.test.js.map +1 -1
  76. package/dist/expressions/literals.d.ts +7 -17
  77. package/dist/expressions/literals.d.ts.map +1 -1
  78. package/dist/expressions/literals.js +27 -87
  79. package/dist/expressions/literals.js.map +1 -1
  80. package/dist/expressions/literals.test.js +52 -2
  81. package/dist/expressions/literals.test.js.map +1 -1
  82. package/dist/expressions/operators.d.ts +29 -11
  83. package/dist/expressions/operators.d.ts.map +1 -1
  84. package/dist/expressions/operators.js +244 -67
  85. package/dist/expressions/operators.js.map +1 -1
  86. package/dist/expressions/other.d.ts +3 -0
  87. package/dist/expressions/other.d.ts.map +1 -1
  88. package/dist/expressions/other.js +27 -3
  89. package/dist/expressions/other.js.map +1 -1
  90. package/dist/generator-exchange.d.ts +1 -1
  91. package/dist/generator-exchange.d.ts.map +1 -1
  92. package/dist/generator-exchange.js +15 -4
  93. package/dist/generator-exchange.js.map +1 -1
  94. package/dist/generator-wrapper.d.ts +84 -0
  95. package/dist/generator-wrapper.d.ts.map +1 -0
  96. package/dist/generator-wrapper.js +312 -0
  97. package/dist/generator-wrapper.js.map +1 -0
  98. package/dist/generator-wrapper.test.d.ts +12 -0
  99. package/dist/generator-wrapper.test.d.ts.map +1 -0
  100. package/dist/generator-wrapper.test.js +179 -0
  101. package/dist/generator-wrapper.test.js.map +1 -0
  102. package/dist/generator.test.js +596 -6
  103. package/dist/generator.test.js.map +1 -1
  104. package/dist/golden-tests/config-parser.d.ts.map +1 -1
  105. package/dist/golden-tests/config-parser.js +81 -11
  106. package/dist/golden-tests/config-parser.js.map +1 -1
  107. package/dist/golden-tests/discovery.d.ts +14 -3
  108. package/dist/golden-tests/discovery.d.ts.map +1 -1
  109. package/dist/golden-tests/discovery.js +105 -12
  110. package/dist/golden-tests/discovery.js.map +1 -1
  111. package/dist/golden-tests/index.d.ts +1 -1
  112. package/dist/golden-tests/index.d.ts.map +1 -1
  113. package/dist/golden-tests/index.js.map +1 -1
  114. package/dist/golden-tests/runner.d.ts +1 -0
  115. package/dist/golden-tests/runner.d.ts.map +1 -1
  116. package/dist/golden-tests/runner.js +83 -25
  117. package/dist/golden-tests/runner.js.map +1 -1
  118. package/dist/golden-tests/types.d.ts +18 -1
  119. package/dist/golden-tests/types.d.ts.map +1 -1
  120. package/dist/golden.test.d.ts +12 -5
  121. package/dist/golden.test.d.ts.map +1 -1
  122. package/dist/golden.test.js +40 -21
  123. package/dist/golden.test.js.map +1 -1
  124. package/dist/hierarchical-bindings.test.js +2 -2
  125. package/dist/hierarchical-bindings.test.js.map +1 -1
  126. package/dist/integration.test.js +57 -10
  127. package/dist/integration.test.js.map +1 -1
  128. package/dist/invariants/emitter-globals-subset.test.d.ts +15 -0
  129. package/dist/invariants/emitter-globals-subset.test.d.ts.map +1 -0
  130. package/dist/invariants/emitter-globals-subset.test.js +137 -0
  131. package/dist/invariants/emitter-globals-subset.test.js.map +1 -0
  132. package/dist/invariants/numeric-proof-contract.test.d.ts +19 -0
  133. package/dist/invariants/numeric-proof-contract.test.d.ts.map +1 -0
  134. package/dist/invariants/numeric-proof-contract.test.js +565 -0
  135. package/dist/invariants/numeric-proof-contract.test.js.map +1 -0
  136. package/dist/specialization/generic-functions.test.js +376 -0
  137. package/dist/specialization/generic-functions.test.js.map +1 -1
  138. package/dist/specialization/interfaces.test.js +6 -6
  139. package/dist/specialization/interfaces.test.js.map +1 -1
  140. package/dist/specialization/substitution.d.ts.map +1 -1
  141. package/dist/specialization/substitution.js +7 -0
  142. package/dist/specialization/substitution.js.map +1 -1
  143. package/dist/specialization/type-aliases.test.js +88 -5
  144. package/dist/specialization/type-aliases.test.js.map +1 -1
  145. package/dist/statement-emitter.d.ts.map +1 -1
  146. package/dist/statement-emitter.js +5 -1
  147. package/dist/statement-emitter.js.map +1 -1
  148. package/dist/statements/blocks.d.ts +39 -1
  149. package/dist/statements/blocks.d.ts.map +1 -1
  150. package/dist/statements/blocks.js +129 -3
  151. package/dist/statements/blocks.js.map +1 -1
  152. package/dist/statements/classes/members/methods.d.ts.map +1 -1
  153. package/dist/statements/classes/members/methods.js +16 -5
  154. package/dist/statements/classes/members/methods.js.map +1 -1
  155. package/dist/statements/classes/members/properties.d.ts.map +1 -1
  156. package/dist/statements/classes/members/properties.js +10 -1
  157. package/dist/statements/classes/members/properties.js.map +1 -1
  158. package/dist/statements/classes/properties.d.ts.map +1 -1
  159. package/dist/statements/classes/properties.js +4 -0
  160. package/dist/statements/classes/properties.js.map +1 -1
  161. package/dist/statements/control/conditionals.d.ts.map +1 -1
  162. package/dist/statements/control/conditionals.js +352 -1
  163. package/dist/statements/control/conditionals.js.map +1 -1
  164. package/dist/statements/control/loops.d.ts +6 -0
  165. package/dist/statements/control/loops.d.ts.map +1 -1
  166. package/dist/statements/control/loops.js +9 -2
  167. package/dist/statements/control/loops.js.map +1 -1
  168. package/dist/statements/declarations/classes.d.ts.map +1 -1
  169. package/dist/statements/declarations/classes.js +20 -6
  170. package/dist/statements/declarations/classes.js.map +1 -1
  171. package/dist/statements/declarations/functions.d.ts.map +1 -1
  172. package/dist/statements/declarations/functions.js +98 -26
  173. package/dist/statements/declarations/functions.js.map +1 -1
  174. package/dist/statements/declarations/interfaces.d.ts.map +1 -1
  175. package/dist/statements/declarations/interfaces.js +11 -1
  176. package/dist/statements/declarations/interfaces.js.map +1 -1
  177. package/dist/statements/declarations/structs.test.js +7 -5
  178. package/dist/statements/declarations/structs.test.js.map +1 -1
  179. package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
  180. package/dist/statements/declarations/type-aliases.js +18 -9
  181. package/dist/statements/declarations/type-aliases.js.map +1 -1
  182. package/dist/statements/declarations/variables.d.ts.map +1 -1
  183. package/dist/statements/declarations/variables.js +54 -2
  184. package/dist/statements/declarations/variables.js.map +1 -1
  185. package/dist/statements/index.test.js +164 -3
  186. package/dist/statements/index.test.js.map +1 -1
  187. package/dist/types/arrays.d.ts +10 -1
  188. package/dist/types/arrays.d.ts.map +1 -1
  189. package/dist/types/arrays.js +16 -1
  190. package/dist/types/arrays.js.map +1 -1
  191. package/dist/types/dictionaries.d.ts +3 -2
  192. package/dist/types/dictionaries.d.ts.map +1 -1
  193. package/dist/types/dictionaries.js +14 -8
  194. package/dist/types/dictionaries.js.map +1 -1
  195. package/dist/types/emitter.d.ts.map +1 -1
  196. package/dist/types/emitter.js +3 -0
  197. package/dist/types/emitter.js.map +1 -1
  198. package/dist/types/index.test.js +5 -2
  199. package/dist/types/index.test.js.map +1 -1
  200. package/dist/types/parameters.d.ts.map +1 -1
  201. package/dist/types/parameters.js +29 -0
  202. package/dist/types/parameters.js.map +1 -1
  203. package/dist/types/primitives.d.ts +12 -1
  204. package/dist/types/primitives.d.ts.map +1 -1
  205. package/dist/types/primitives.js +14 -1
  206. package/dist/types/primitives.js.map +1 -1
  207. package/dist/types/references.d.ts.map +1 -1
  208. package/dist/types/references.js +136 -30
  209. package/dist/types/references.js.map +1 -1
  210. package/dist/types/references.test.d.ts +11 -0
  211. package/dist/types/references.test.d.ts.map +1 -0
  212. package/dist/types/references.test.js +382 -0
  213. package/dist/types/references.test.js.map +1 -0
  214. package/dist/types/tuples.d.ts +23 -0
  215. package/dist/types/tuples.d.ts.map +1 -0
  216. package/dist/types/tuples.js +54 -0
  217. package/dist/types/tuples.js.map +1 -0
  218. package/dist/types/unions.test.js +62 -15
  219. package/dist/types/unions.test.js.map +1 -1
  220. package/dist/types.d.ts +1 -1
  221. package/dist/types.d.ts.map +1 -1
  222. package/dist/types.js.map +1 -1
  223. package/package.json +7 -3
@@ -1,32 +1,22 @@
1
1
  /**
2
2
  * Literal expression emitters
3
+ *
4
+ * NEW NUMERIC SPEC:
5
+ * - Integer literals (42) have type int
6
+ * - Floating literals (42.0, 3.14, 1e3) have type double
7
+ * - The raw lexeme determines the C# type, NOT contextual typing
8
+ * - No automatic widening from int to double based on expected type
3
9
  */
4
10
  import { IrExpression, IrType } from "@tsonic/frontend";
5
11
  import { EmitterContext, CSharpFragment } from "../types.js";
6
- /**
7
- * Check if a C# type requires integer values
8
- */
9
- export declare const requiresInteger: (clrType: string | undefined) => boolean;
10
12
  /**
11
13
  * Emit a literal value (string, number, boolean, null, undefined)
12
14
  *
13
15
  * @param expr - The literal expression
14
16
  * @param context - Emitter context
15
17
  * @param expectedType - Optional expected IR type (for null → default conversion in generic contexts)
16
- * @param expectedClrType - Optional expected C# type (for int-required contexts)
17
18
  */
18
19
  export declare const emitLiteral: (expr: Extract<IrExpression, {
19
20
  kind: "literal";
20
- }>, context: EmitterContext, expectedType?: IrType, expectedClrType?: string) => [CSharpFragment, EmitterContext];
21
- /**
22
- * Helper to determine expected CLR type from IrType for numeric contexts.
23
- * Returns the CLR type name if it requires integer, undefined otherwise.
24
- *
25
- * TODO: Expand this to handle more cases:
26
- * - Method parameter types (requires signature lookup)
27
- * - LINQ methods: Take(int), Skip(int), ElementAt(int)
28
- * - String methods: Substring(int, int)
29
- * - Generic type argument inference contexts
30
- */
31
- export declare const getExpectedClrTypeForNumeric: (irType: IrType | undefined) => string | undefined;
21
+ }>, context: EmitterContext, expectedType?: IrType) => [CSharpFragment, EmitterContext];
32
22
  //# sourceMappingURL=literals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../../src/expressions/literals.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;AAkC7D;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,GAAG,SAAS,KAAG,OAG7D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,EAChD,SAAS,cAAc,EACvB,eAAe,MAAM,EACrB,kBAAkB,MAAM,KACvB,CAAC,cAAc,EAAE,cAAc,CAwDjC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,GACvC,QAAQ,MAAM,GAAG,SAAS,KACzB,MAAM,GAAG,SAiBX,CAAC"}
1
+ {"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../../src/expressions/literals.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM7D;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,EAChD,SAAS,cAAc,EACvB,eAAe,MAAM,KACpB,CAAC,cAAc,EAAE,cAAc,CAuDjC,CAAC"}
@@ -1,62 +1,34 @@
1
1
  /**
2
2
  * Literal expression emitters
3
+ *
4
+ * NEW NUMERIC SPEC:
5
+ * - Integer literals (42) have type int
6
+ * - Floating literals (42.0, 3.14, 1e3) have type double
7
+ * - The raw lexeme determines the C# type, NOT contextual typing
8
+ * - No automatic widening from int to double based on expected type
3
9
  */
4
- import { containsTypeParameter } from "../core/type-resolution.js";
5
- /**
6
- * C# types that require integer values (not double).
7
- * Used to determine when numeric literals should emit as int vs double.
8
- */
9
- const INT_REQUIRED_TYPES = new Set([
10
- "int",
11
- "Int32",
12
- "System.Int32",
13
- "long",
14
- "Int64",
15
- "System.Int64",
16
- "short",
17
- "Int16",
18
- "System.Int16",
19
- "byte",
20
- "Byte",
21
- "System.Byte",
22
- "sbyte",
23
- "SByte",
24
- "System.SByte",
25
- "uint",
26
- "UInt32",
27
- "System.UInt32",
28
- "ulong",
29
- "UInt64",
30
- "System.UInt64",
31
- "ushort",
32
- "UInt16",
33
- "System.UInt16",
34
- ]);
35
- /**
36
- * Check if a C# type requires integer values
37
- */
38
- export const requiresInteger = (clrType) => {
39
- if (!clrType)
40
- return false;
41
- return INT_REQUIRED_TYPES.has(clrType);
42
- };
10
+ import { containsTypeParameter, isDefinitelyValueType, } from "../core/type-resolution.js";
43
11
  /**
44
12
  * Emit a literal value (string, number, boolean, null, undefined)
45
13
  *
46
14
  * @param expr - The literal expression
47
15
  * @param context - Emitter context
48
16
  * @param expectedType - Optional expected IR type (for null → default conversion in generic contexts)
49
- * @param expectedClrType - Optional expected C# type (for int-required contexts)
50
17
  */
51
- export const emitLiteral = (expr, context, expectedType, expectedClrType) => {
18
+ export const emitLiteral = (expr, context, expectedType) => {
52
19
  const { value } = expr;
53
20
  if (value === null) {
54
- // In generic contexts where expected type contains type parameters,
55
- // emit "default" instead of "null" to avoid CS0403 error.
56
- // Example: Result<T> { value: null } → { value = default }
57
- const typeParams = context.typeParameters ?? new Set();
58
- if (expectedType && containsTypeParameter(expectedType, typeParams)) {
59
- return [{ text: "default" }, context];
21
+ // Emit "default" instead of "null" in two cases:
22
+ // 1. Generic contexts where expected type contains type parameters (CS0403)
23
+ // Example: Result<T> { value: null } → { value = default }
24
+ // 2. Value type contexts where null is invalid (CS0037)
25
+ // Example: Result<number, string> { value: null } → { value = default }
26
+ if (expectedType) {
27
+ const typeParams = context.typeParameters ?? new Set();
28
+ if (containsTypeParameter(expectedType, typeParams) ||
29
+ isDefinitelyValueType(expectedType)) {
30
+ return [{ text: "default" }, context];
31
+ }
60
32
  }
61
33
  return [{ text: "null" }, context];
62
34
  }
@@ -74,21 +46,15 @@ export const emitLiteral = (expr, context, expectedType, expectedClrType) => {
74
46
  return [{ text: `"${escaped}"` }, context];
75
47
  }
76
48
  if (typeof value === "number") {
77
- // Check if context requires integer (array index, int parameter, etc.)
78
- // Priority: explicit expectedClrType > context.isArrayIndex > default (double)
79
- const needsInteger = requiresInteger(expectedClrType) || context.isArrayIndex === true;
80
- if (needsInteger) {
81
- // Integer-required context: emit without decimal
82
- const text = Number.isInteger(value)
83
- ? String(value)
84
- : String(Math.floor(value));
85
- return [{ text }, context];
86
- }
87
- // TypeScript `number` is always `double` in C#
88
- // Emit as double: ensure decimal point for integer values
89
- if (Number.isInteger(value) && !String(value).includes(".")) {
90
- return [{ text: `${value}.0` }, context];
49
+ // NEW NUMERIC SPEC: Use raw lexeme to preserve user's literal form.
50
+ // - Integer literals (42) type int in C#
51
+ // - Floating literals (42.0, 3.14, 1e3) type double in C#
52
+ // The raw lexeme determines the C# type, NOT contextual typing.
53
+ if (expr.raw !== undefined) {
54
+ return [{ text: expr.raw }, context];
91
55
  }
56
+ // Fallback if raw is not available (shouldn't happen for source literals)
57
+ // Use String(value) which will produce integer form for whole numbers
92
58
  return [{ text: String(value) }, context];
93
59
  }
94
60
  if (typeof value === "boolean") {
@@ -96,30 +62,4 @@ export const emitLiteral = (expr, context, expectedType, expectedClrType) => {
96
62
  }
97
63
  return [{ text: String(value) }, context];
98
64
  };
99
- /**
100
- * Helper to determine expected CLR type from IrType for numeric contexts.
101
- * Returns the CLR type name if it requires integer, undefined otherwise.
102
- *
103
- * TODO: Expand this to handle more cases:
104
- * - Method parameter types (requires signature lookup)
105
- * - LINQ methods: Take(int), Skip(int), ElementAt(int)
106
- * - String methods: Substring(int, int)
107
- * - Generic type argument inference contexts
108
- */
109
- export const getExpectedClrTypeForNumeric = (irType) => {
110
- if (!irType)
111
- return undefined;
112
- if (irType.kind === "primitiveType") {
113
- // TS number -> C# double (default)
114
- // TS doesn't have int type, so this won't trigger
115
- return undefined;
116
- }
117
- if (irType.kind === "referenceType") {
118
- // Check if it's an int type from .NET interop
119
- if (requiresInteger(irType.name)) {
120
- return irType.name;
121
- }
122
- }
123
- return undefined;
124
- };
125
65
  //# sourceMappingURL=literals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"literals.js","sourceRoot":"","sources":["../../src/expressions/literals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"literals.js","sourceRoot":"","sources":["../../src/expressions/literals.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,IAAgD,EAChD,OAAuB,EACvB,YAAqB,EACa,EAAE;IACpC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEvB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,iDAAiD;QACjD,4EAA4E;QAC5E,8DAA8D;QAC9D,wDAAwD;QACxD,2EAA2E;QAC3E,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,GAAG,EAAU,CAAC;YAC/D,IACE,qBAAqB,CAAC,YAAY,EAAE,UAAU,CAAC;gBAC/C,qBAAqB,CAAC,YAAY,CAAC,EACnC,CAAC;gBACD,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,2BAA2B;QAC3B,MAAM,OAAO,GAAG,KAAK;aAClB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,oEAAoE;QACpE,2CAA2C;QAC3C,4DAA4D;QAC5D,gEAAgE;QAChE,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,0EAA0E;QAC1E,sEAAsE;QACtE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC,CAAC"}
@@ -85,6 +85,47 @@ describe("emitLiteral", () => {
85
85
  const [fragment] = emitLiteral(expr, context, expectedType);
86
86
  expect(fragment.text).to.equal("default");
87
87
  });
88
+ // Bug 2 regression: null to value type (CS0037)
89
+ it("emits 'default' when expectedType is number (value type)", () => {
90
+ const expr = {
91
+ kind: "literal",
92
+ value: null,
93
+ };
94
+ // number is a value type (double in C#), null is invalid
95
+ const expectedType = { kind: "primitiveType", name: "number" };
96
+ const context = createContext();
97
+ const [fragment] = emitLiteral(expr, context, expectedType);
98
+ expect(fragment.text).to.equal("default");
99
+ });
100
+ it("emits 'default' when expectedType is number | null union (value type after stripNullish)", () => {
101
+ const expr = {
102
+ kind: "literal",
103
+ value: null,
104
+ };
105
+ // Result<number, string>.value is substituted to number | null
106
+ // After stripNullish, it's number (a value type)
107
+ const expectedType = {
108
+ kind: "unionType",
109
+ types: [
110
+ { kind: "primitiveType", name: "number" },
111
+ { kind: "primitiveType", name: "null" },
112
+ ],
113
+ };
114
+ const context = createContext();
115
+ const [fragment] = emitLiteral(expr, context, expectedType);
116
+ expect(fragment.text).to.equal("default");
117
+ });
118
+ it("emits 'default' when expectedType is boolean (value type)", () => {
119
+ const expr = {
120
+ kind: "literal",
121
+ value: null,
122
+ };
123
+ // boolean is a value type (bool in C#), null is invalid
124
+ const expectedType = { kind: "primitiveType", name: "boolean" };
125
+ const context = createContext();
126
+ const [fragment] = emitLiteral(expr, context, expectedType);
127
+ expect(fragment.text).to.equal("default");
128
+ });
88
129
  });
89
130
  describe("undefined literal", () => {
90
131
  it("emits 'default' for undefined", () => {
@@ -98,14 +139,23 @@ describe("emitLiteral", () => {
98
139
  });
99
140
  });
100
141
  describe("number literal", () => {
101
- it("emits double format for integers", () => {
142
+ it("emits integer literals as-is (lets C# infer type)", () => {
102
143
  const expr = {
103
144
  kind: "literal",
104
145
  value: 42,
105
146
  };
106
147
  const context = createContext();
107
148
  const [fragment] = emitLiteral(expr, context);
108
- expect(fragment.text).to.equal("42.0");
149
+ expect(fragment.text).to.equal("42");
150
+ });
151
+ it("emits decimal literals as-is (lets C# infer double)", () => {
152
+ const expr = {
153
+ kind: "literal",
154
+ value: 3.14,
155
+ };
156
+ const context = createContext();
157
+ const [fragment] = emitLiteral(expr, context);
158
+ expect(fragment.text).to.equal("3.14");
109
159
  });
110
160
  it("emits integer format in array index context", () => {
111
161
  const expr = {
@@ -1 +1 @@
1
- {"version":3,"file":"literals.test.js","sourceRoot":"","sources":["../../src/expressions/literals.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"literals.test.js","sourceRoot":"","sources":["../../src/expressions/literals.test.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,34 @@
1
1
  /**
2
2
  * Operator expression emitters (binary, logical, unary, update, assignment, conditional)
3
+ *
4
+ * NEW NUMERIC SPEC:
5
+ * - Literals use raw lexeme (no contextual widening)
6
+ * - Integer casts only from IrCastExpression (not inferred from expectedType)
7
+ * - Binary ops: int op int = int, double op anything = double (C# semantics)
3
8
  */
4
9
  import { IrExpression, IrType } from "@tsonic/frontend";
5
10
  import { EmitterContext, CSharpFragment } from "../types.js";
6
11
  /**
7
12
  * Emit a binary operator expression
8
13
  *
9
- * When the expression has an integer inferredType (from `as int` etc.),
10
- * or when expectedType requires an integer, we wrap the result with an
11
- * explicit cast to ensure correct C# semantics.
12
- * This handles cases like `(i + 1) as int` which must emit as `(int)(i + 1)`.
14
+ * NEW NUMERIC SPEC: No contextual type propagation for numeric literals.
15
+ * Literals use their raw lexeme - C# will naturally handle int + int = int,
16
+ * int + double = double, etc.
17
+ *
18
+ * Explicit casts come from IrCastExpression nodes (generated by type-checker
19
+ * when user intent allows int → double coercion).
20
+ *
21
+ * STRING INDEXER FIX: In C#, string[int] returns char, not string.
22
+ * When comparing a string indexer result with a single-character string literal,
23
+ * we emit the string as a char literal to avoid CS0019 (char == string).
13
24
  *
14
25
  * @param expr - The binary expression
15
26
  * @param context - Emitter context
16
- * @param expectedType - Optional expected type from outer context (assignment, return, etc.)
27
+ * @param _expectedType - Unused under new spec (kept for API compatibility)
17
28
  */
18
29
  export declare const emitBinary: (expr: Extract<IrExpression, {
19
30
  kind: "binary";
20
- }>, context: EmitterContext, expectedType?: IrType) => [CSharpFragment, EmitterContext];
31
+ }>, context: EmitterContext, _expectedType?: IrType) => [CSharpFragment, EmitterContext];
21
32
  /**
22
33
  * Emit a logical operator expression (&&, ||, ??)
23
34
  *
@@ -37,17 +48,16 @@ export declare const emitLogical: (expr: Extract<IrExpression, {
37
48
  /**
38
49
  * Emit a unary operator expression (-, +, !, ~, typeof, void, delete)
39
50
  *
40
- * When the expression has an integer inferredType (from `as int` etc.),
41
- * or when expectedType requires an integer, we wrap the result with an
42
- * explicit cast. This handles `-1 as int`.
51
+ * NEW NUMERIC SPEC: No contextual type propagation for numeric literals.
52
+ * Explicit casts come from IrCastExpression nodes.
43
53
  *
44
54
  * @param expr - The unary expression
45
55
  * @param context - Emitter context
46
- * @param expectedType - Optional expected type from outer context
56
+ * @param _expectedType - Unused under new spec (kept for API compatibility)
47
57
  */
48
58
  export declare const emitUnary: (expr: Extract<IrExpression, {
49
59
  kind: "unary";
50
- }>, context: EmitterContext, expectedType?: IrType) => [CSharpFragment, EmitterContext];
60
+ }>, context: EmitterContext, _expectedType?: IrType) => [CSharpFragment, EmitterContext];
51
61
  /**
52
62
  * Emit an update operator expression (++, --)
53
63
  */
@@ -59,6 +69,10 @@ export declare const emitUpdate: (expr: Extract<IrExpression, {
59
69
  *
60
70
  * Passes the LHS type as expected type to RHS, enabling proper integer
61
71
  * literal emission for cases like `this.value = this.value + 1`.
72
+ *
73
+ * Special handling for JS mode array element assignment:
74
+ * - In JS mode, array[idx] = value must emit Array.set(array, idx, value)
75
+ * - NOT Array.get(array, idx) = value (which is invalid C#)
62
76
  */
63
77
  export declare const emitAssignment: (expr: Extract<IrExpression, {
64
78
  kind: "assignment";
@@ -66,6 +80,10 @@ export declare const emitAssignment: (expr: Extract<IrExpression, {
66
80
  /**
67
81
  * Emit a conditional (ternary) expression
68
82
  *
83
+ * Supports type predicate narrowing:
84
+ * - `isUser(x) ? x.name : "anon"` → `x.Is1() ? (x.As1()).name : "anon"`
85
+ * - `!isUser(x) ? "anon" : x.name` → `!x.Is1() ? "anon" : (x.As1()).name`
86
+ *
69
87
  * @param expr - The conditional expression
70
88
  * @param context - Emitter context
71
89
  * @param expectedType - Optional expected type (for null → default in generic contexts)
@@ -1 +1 @@
1
- {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/expressions/operators.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;AA8E7D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,EAC/C,SAAS,cAAc,EACvB,eAAe,MAAM,KACpB,CAAC,cAAc,EAAE,cAAc,CA6CjC,CAAC;AAUF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,EAChD,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CAYjC,CAAC;AAEF;;;;;;;;;;GAUG;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,CAwCjC,CAAC;AAEF;;GAEG;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,CAQjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,EACnD,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CAsCjC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,EACpD,SAAS,cAAc,EACvB,eAAe,MAAM,KACpB,CAAC,cAAc,EAAE,cAAc,CAgBjC,CAAC"}
1
+ {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/expressions/operators.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAC;AA0F9E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,EAC/C,SAAS,cAAc,EACvB,gBAAgB,MAAM,KACrB,CAAC,cAAc,EAAE,cAAc,CAyHjC,CAAC;AAUF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,EAChD,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CAYjC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GACpB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,EAC9C,SAAS,cAAc,EACvB,gBAAgB,MAAM,KACrB,CAAC,cAAc,EAAE,cAAc,CAwBjC,CAAC;AAEF;;GAEG;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,CAQjC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,EACnD,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CAoEjC,CAAC;AAwEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,EACpD,SAAS,cAAc,EACvB,eAAe,MAAM,KACpB,CAAC,cAAc,EAAE,cAAc,CA8DjC,CAAC"}