@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/array.test.js +5 -5
- package/dist/array.test.js.map +1 -1
- package/dist/core/attributes.d.ts +43 -0
- package/dist/core/attributes.d.ts.map +1 -0
- package/dist/core/attributes.js +128 -0
- package/dist/core/attributes.js.map +1 -0
- package/dist/core/attributes.test.d.ts +5 -0
- package/dist/core/attributes.test.d.ts.map +1 -0
- package/dist/core/attributes.test.js +296 -0
- package/dist/core/attributes.test.js.map +1 -0
- package/dist/core/imports.test.js +6 -3
- package/dist/core/imports.test.js.map +1 -1
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/module-emitter/static-container.js +50 -1
- package/dist/core/module-emitter/static-container.js.map +1 -1
- package/dist/core/module-emitter.test.js +2 -1
- package/dist/core/module-emitter.test.js.map +1 -1
- package/dist/core/module-map.d.ts.map +1 -1
- package/dist/core/module-map.js +5 -1
- package/dist/core/module-map.js.map +1 -1
- package/dist/core/module-map.test.d.ts +8 -0
- package/dist/core/module-map.test.d.ts.map +1 -0
- package/dist/core/module-map.test.js +94 -0
- package/dist/core/module-map.test.js.map +1 -0
- package/dist/core/type-compatibility.d.ts +31 -0
- package/dist/core/type-compatibility.d.ts.map +1 -0
- package/dist/core/type-compatibility.js +99 -0
- package/dist/core/type-compatibility.js.map +1 -0
- package/dist/core/type-resolution.d.ts +83 -3
- package/dist/core/type-resolution.d.ts.map +1 -1
- package/dist/core/type-resolution.js +262 -4
- package/dist/core/type-resolution.js.map +1 -1
- package/dist/core/type-resolution.test.js +110 -1
- package/dist/core/type-resolution.test.js.map +1 -1
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +21 -1
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +26 -0
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter-types/identifiers.d.ts.map +1 -1
- package/dist/emitter-types/identifiers.js +4 -43
- package/dist/emitter-types/identifiers.js.map +1 -1
- package/dist/emitter-types/index.d.ts +1 -1
- package/dist/emitter-types/index.d.ts.map +1 -1
- package/dist/emitter-types/index.js.map +1 -1
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +47 -1
- package/dist/emitter.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +51 -3
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +138 -23
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/calls.d.ts.map +1 -1
- package/dist/expressions/calls.js +90 -13
- package/dist/expressions/calls.js.map +1 -1
- package/dist/expressions/collections.d.ts +3 -2
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +251 -52
- package/dist/expressions/collections.js.map +1 -1
- package/dist/expressions/functions.d.ts +2 -2
- package/dist/expressions/functions.d.ts.map +1 -1
- package/dist/expressions/functions.js +81 -38
- package/dist/expressions/functions.js.map +1 -1
- package/dist/expressions/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +28 -7
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index.test.js +191 -4
- package/dist/expressions/index.test.js.map +1 -1
- package/dist/expressions/literals.d.ts +7 -17
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +27 -87
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/literals.test.js +52 -2
- package/dist/expressions/literals.test.js.map +1 -1
- package/dist/expressions/operators.d.ts +29 -11
- package/dist/expressions/operators.d.ts.map +1 -1
- package/dist/expressions/operators.js +244 -67
- package/dist/expressions/operators.js.map +1 -1
- package/dist/expressions/other.d.ts +3 -0
- package/dist/expressions/other.d.ts.map +1 -1
- package/dist/expressions/other.js +27 -3
- package/dist/expressions/other.js.map +1 -1
- package/dist/generator-exchange.d.ts +1 -1
- package/dist/generator-exchange.d.ts.map +1 -1
- package/dist/generator-exchange.js +15 -4
- package/dist/generator-exchange.js.map +1 -1
- package/dist/generator-wrapper.d.ts +84 -0
- package/dist/generator-wrapper.d.ts.map +1 -0
- package/dist/generator-wrapper.js +312 -0
- package/dist/generator-wrapper.js.map +1 -0
- package/dist/generator-wrapper.test.d.ts +12 -0
- package/dist/generator-wrapper.test.d.ts.map +1 -0
- package/dist/generator-wrapper.test.js +179 -0
- package/dist/generator-wrapper.test.js.map +1 -0
- package/dist/generator.test.js +596 -6
- package/dist/generator.test.js.map +1 -1
- package/dist/golden-tests/config-parser.d.ts.map +1 -1
- package/dist/golden-tests/config-parser.js +81 -11
- package/dist/golden-tests/config-parser.js.map +1 -1
- package/dist/golden-tests/discovery.d.ts +14 -3
- package/dist/golden-tests/discovery.d.ts.map +1 -1
- package/dist/golden-tests/discovery.js +105 -12
- package/dist/golden-tests/discovery.js.map +1 -1
- package/dist/golden-tests/index.d.ts +1 -1
- package/dist/golden-tests/index.d.ts.map +1 -1
- package/dist/golden-tests/index.js.map +1 -1
- package/dist/golden-tests/runner.d.ts +1 -0
- package/dist/golden-tests/runner.d.ts.map +1 -1
- package/dist/golden-tests/runner.js +83 -25
- package/dist/golden-tests/runner.js.map +1 -1
- package/dist/golden-tests/types.d.ts +18 -1
- package/dist/golden-tests/types.d.ts.map +1 -1
- package/dist/golden.test.d.ts +12 -5
- package/dist/golden.test.d.ts.map +1 -1
- package/dist/golden.test.js +40 -21
- package/dist/golden.test.js.map +1 -1
- package/dist/hierarchical-bindings.test.js +2 -2
- package/dist/hierarchical-bindings.test.js.map +1 -1
- package/dist/integration.test.js +57 -10
- package/dist/integration.test.js.map +1 -1
- package/dist/invariants/emitter-globals-subset.test.d.ts +15 -0
- package/dist/invariants/emitter-globals-subset.test.d.ts.map +1 -0
- package/dist/invariants/emitter-globals-subset.test.js +137 -0
- package/dist/invariants/emitter-globals-subset.test.js.map +1 -0
- package/dist/invariants/numeric-proof-contract.test.d.ts +19 -0
- package/dist/invariants/numeric-proof-contract.test.d.ts.map +1 -0
- package/dist/invariants/numeric-proof-contract.test.js +565 -0
- package/dist/invariants/numeric-proof-contract.test.js.map +1 -0
- package/dist/specialization/generic-functions.test.js +376 -0
- package/dist/specialization/generic-functions.test.js.map +1 -1
- package/dist/specialization/interfaces.test.js +6 -6
- package/dist/specialization/interfaces.test.js.map +1 -1
- package/dist/specialization/substitution.d.ts.map +1 -1
- package/dist/specialization/substitution.js +7 -0
- package/dist/specialization/substitution.js.map +1 -1
- package/dist/specialization/type-aliases.test.js +88 -5
- package/dist/specialization/type-aliases.test.js.map +1 -1
- package/dist/statement-emitter.d.ts.map +1 -1
- package/dist/statement-emitter.js +5 -1
- package/dist/statement-emitter.js.map +1 -1
- package/dist/statements/blocks.d.ts +39 -1
- package/dist/statements/blocks.d.ts.map +1 -1
- package/dist/statements/blocks.js +129 -3
- package/dist/statements/blocks.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +16 -5
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/classes/members/properties.d.ts.map +1 -1
- package/dist/statements/classes/members/properties.js +10 -1
- package/dist/statements/classes/members/properties.js.map +1 -1
- package/dist/statements/classes/properties.d.ts.map +1 -1
- package/dist/statements/classes/properties.js +4 -0
- package/dist/statements/classes/properties.js.map +1 -1
- package/dist/statements/control/conditionals.d.ts.map +1 -1
- package/dist/statements/control/conditionals.js +352 -1
- package/dist/statements/control/conditionals.js.map +1 -1
- package/dist/statements/control/loops.d.ts +6 -0
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +9 -2
- package/dist/statements/control/loops.js.map +1 -1
- package/dist/statements/declarations/classes.d.ts.map +1 -1
- package/dist/statements/declarations/classes.js +20 -6
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/functions.d.ts.map +1 -1
- package/dist/statements/declarations/functions.js +98 -26
- package/dist/statements/declarations/functions.js.map +1 -1
- package/dist/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/statements/declarations/interfaces.js +11 -1
- package/dist/statements/declarations/interfaces.js.map +1 -1
- package/dist/statements/declarations/structs.test.js +7 -5
- package/dist/statements/declarations/structs.test.js.map +1 -1
- package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/statements/declarations/type-aliases.js +18 -9
- package/dist/statements/declarations/type-aliases.js.map +1 -1
- package/dist/statements/declarations/variables.d.ts.map +1 -1
- package/dist/statements/declarations/variables.js +54 -2
- package/dist/statements/declarations/variables.js.map +1 -1
- package/dist/statements/index.test.js +164 -3
- package/dist/statements/index.test.js.map +1 -1
- package/dist/types/arrays.d.ts +10 -1
- package/dist/types/arrays.d.ts.map +1 -1
- package/dist/types/arrays.js +16 -1
- package/dist/types/arrays.js.map +1 -1
- package/dist/types/dictionaries.d.ts +3 -2
- package/dist/types/dictionaries.d.ts.map +1 -1
- package/dist/types/dictionaries.js +14 -8
- package/dist/types/dictionaries.js.map +1 -1
- package/dist/types/emitter.d.ts.map +1 -1
- package/dist/types/emitter.js +3 -0
- package/dist/types/emitter.js.map +1 -1
- package/dist/types/index.test.js +5 -2
- package/dist/types/index.test.js.map +1 -1
- package/dist/types/parameters.d.ts.map +1 -1
- package/dist/types/parameters.js +29 -0
- package/dist/types/parameters.js.map +1 -1
- package/dist/types/primitives.d.ts +12 -1
- package/dist/types/primitives.d.ts.map +1 -1
- package/dist/types/primitives.js +14 -1
- package/dist/types/primitives.js.map +1 -1
- package/dist/types/references.d.ts.map +1 -1
- package/dist/types/references.js +136 -30
- package/dist/types/references.js.map +1 -1
- package/dist/types/references.test.d.ts +11 -0
- package/dist/types/references.test.d.ts.map +1 -0
- package/dist/types/references.test.js +382 -0
- package/dist/types/references.test.js.map +1 -0
- package/dist/types/tuples.d.ts +23 -0
- package/dist/types/tuples.d.ts.map +1 -0
- package/dist/types/tuples.js +54 -0
- package/dist/types/tuples.js.map +1 -0
- package/dist/types/unions.test.js +62 -15
- package/dist/types/unions.test.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -3
|
@@ -17,6 +17,27 @@ import { emitType } from "../type-emitter.js";
|
|
|
17
17
|
const isLValue = (expr) => {
|
|
18
18
|
return expr.kind === "identifier" || expr.kind === "memberAccess";
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Check if an expression has an `as out<T>`, `as ref<T>`, or `as inref<T>` cast.
|
|
22
|
+
* Returns the modifier ("out", "ref", "in") or undefined if not a passing modifier cast.
|
|
23
|
+
*
|
|
24
|
+
* When TypeScript code has `value as out<int>`, the frontend converts this to
|
|
25
|
+
* an expression with `inferredType: { kind: "referenceType", name: "out", ... }`.
|
|
26
|
+
*/
|
|
27
|
+
const getPassingModifierFromCast = (expr) => {
|
|
28
|
+
const inferredType = expr.inferredType;
|
|
29
|
+
if (!inferredType || inferredType.kind !== "referenceType") {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const typeName = inferredType.name;
|
|
33
|
+
if (typeName === "out")
|
|
34
|
+
return "out";
|
|
35
|
+
if (typeName === "ref")
|
|
36
|
+
return "ref";
|
|
37
|
+
if (typeName === "inref")
|
|
38
|
+
return "in"; // inref maps to C# 'in' keyword
|
|
39
|
+
return undefined;
|
|
40
|
+
};
|
|
20
41
|
/**
|
|
21
42
|
* Check if a member access expression targets System.Text.Json.JsonSerializer
|
|
22
43
|
*/
|
|
@@ -36,6 +57,27 @@ const isJsonSerializerCall = (callee) => {
|
|
|
36
57
|
return { method: "Deserialize" };
|
|
37
58
|
return null;
|
|
38
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Check if a call targets global JSON.stringify or JSON.parse
|
|
62
|
+
* These are JS-mode globals that should compile to JsonSerializer
|
|
63
|
+
*/
|
|
64
|
+
const isGlobalJsonCall = (callee) => {
|
|
65
|
+
if (callee.kind !== "memberAccess")
|
|
66
|
+
return null;
|
|
67
|
+
// Check if object is the global JSON identifier
|
|
68
|
+
const obj = callee.object;
|
|
69
|
+
if (obj.kind !== "identifier" || obj.name !== "JSON")
|
|
70
|
+
return null;
|
|
71
|
+
// Check property name
|
|
72
|
+
const prop = callee.property;
|
|
73
|
+
if (typeof prop !== "string")
|
|
74
|
+
return null;
|
|
75
|
+
if (prop === "stringify")
|
|
76
|
+
return { method: "Serialize" };
|
|
77
|
+
if (prop === "parse")
|
|
78
|
+
return { method: "Deserialize" };
|
|
79
|
+
return null;
|
|
80
|
+
};
|
|
39
81
|
/**
|
|
40
82
|
* Ensure a C# type string has global:: prefix for unambiguous resolution
|
|
41
83
|
*/
|
|
@@ -66,7 +108,8 @@ const ensureGlobalPrefix = (typeStr) => {
|
|
|
66
108
|
return `global::${typeStr}`;
|
|
67
109
|
};
|
|
68
110
|
/**
|
|
69
|
-
* Register a type with the JSON AOT registry
|
|
111
|
+
* Register a type with the JSON AOT registry.
|
|
112
|
+
* Ensures types are fully qualified with namespace for the AOT source generator.
|
|
70
113
|
*/
|
|
71
114
|
const registerJsonAotType = (type, context) => {
|
|
72
115
|
if (!type)
|
|
@@ -75,8 +118,21 @@ const registerJsonAotType = (type, context) => {
|
|
|
75
118
|
return;
|
|
76
119
|
const registry = context.options.jsonAotRegistry;
|
|
77
120
|
const [typeStr] = emitType(type, context);
|
|
78
|
-
|
|
79
|
-
|
|
121
|
+
// If type already has a namespace (contains '.') or is global::, use as-is
|
|
122
|
+
// Otherwise, qualify with rootNamespace (it's a local type)
|
|
123
|
+
let qualifiedType;
|
|
124
|
+
if (typeStr.startsWith("global::") ||
|
|
125
|
+
typeStr.includes(".") ||
|
|
126
|
+
typeStr.includes("<") // Generic types handle their own qualification
|
|
127
|
+
) {
|
|
128
|
+
qualifiedType = ensureGlobalPrefix(typeStr);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Local type - qualify with rootNamespace
|
|
132
|
+
const rootNs = context.options.rootNamespace;
|
|
133
|
+
qualifiedType = `global::${rootNs}.${typeStr}`;
|
|
134
|
+
}
|
|
135
|
+
registry.rootTypes.add(qualifiedType);
|
|
80
136
|
registry.needsJsonAot = true;
|
|
81
137
|
};
|
|
82
138
|
/**
|
|
@@ -85,7 +141,7 @@ const registerJsonAotType = (type, context) => {
|
|
|
85
141
|
* returns double in C# but is cast to int in TypeScript via `as int`.
|
|
86
142
|
*/
|
|
87
143
|
const needsIntCast = (expr, calleeName) => {
|
|
88
|
-
// Check if the inferred type is int (a reference type from @tsonic/
|
|
144
|
+
// Check if the inferred type is int (a reference type from @tsonic/core)
|
|
89
145
|
const inferredType = expr.inferredType;
|
|
90
146
|
if (!inferredType ||
|
|
91
147
|
inferredType.kind !== "referenceType" ||
|
|
@@ -166,6 +222,12 @@ export const emitCall = (expr, context) => {
|
|
|
166
222
|
if (jsonCall) {
|
|
167
223
|
return emitJsonSerializerCall(expr, context, jsonCall.method);
|
|
168
224
|
}
|
|
225
|
+
// Check for global JSON.stringify/parse calls (JS mode)
|
|
226
|
+
// These compile to JsonSerializer.Serialize/Deserialize for unified behavior
|
|
227
|
+
const globalJsonCall = isGlobalJsonCall(expr.callee);
|
|
228
|
+
if (globalJsonCall) {
|
|
229
|
+
return emitJsonSerializerCall(expr, context, globalJsonCall.method);
|
|
230
|
+
}
|
|
169
231
|
// Type-aware method call rewriting
|
|
170
232
|
// Use inferredType to determine if we need to rewrite as static helper
|
|
171
233
|
if (expr.callee.kind === "memberAccess" &&
|
|
@@ -249,11 +311,15 @@ export const emitCall = (expr, context) => {
|
|
|
249
311
|
currentContext = typeContext;
|
|
250
312
|
}
|
|
251
313
|
}
|
|
314
|
+
// Get parameter types from IR (extracted from resolved signature in frontend)
|
|
315
|
+
const parameterTypes = expr.parameterTypes ?? [];
|
|
252
316
|
const args = [];
|
|
253
317
|
for (let i = 0; i < expr.arguments.length; i++) {
|
|
254
318
|
const arg = expr.arguments[i];
|
|
255
319
|
if (!arg)
|
|
256
320
|
continue; // Skip undefined (shouldn't happen in valid IR)
|
|
321
|
+
// Get expected type for this argument from parameter types
|
|
322
|
+
const expectedType = parameterTypes[i];
|
|
257
323
|
if (arg.kind === "spread") {
|
|
258
324
|
// Spread in function call
|
|
259
325
|
const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
|
|
@@ -261,15 +327,26 @@ export const emitCall = (expr, context) => {
|
|
|
261
327
|
currentContext = ctx;
|
|
262
328
|
}
|
|
263
329
|
else {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
330
|
+
// Check if this argument has an explicit `as out<T>` / `as ref<T>` / `as inref<T>` cast
|
|
331
|
+
const castModifier = getPassingModifierFromCast(arg);
|
|
332
|
+
if (castModifier && isLValue(arg)) {
|
|
333
|
+
// Emit the expression without the cast wrapper, with the modifier prefix
|
|
334
|
+
// For `value as out<int>`, emit `out value`
|
|
335
|
+
const [argFrag, ctx] = emitExpression(arg, currentContext);
|
|
336
|
+
args.push(`${castModifier} ${argFrag.text}`);
|
|
337
|
+
currentContext = ctx;
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
const [argFrag, ctx] = emitExpression(arg, currentContext, expectedType);
|
|
341
|
+
// Check if this argument needs ref/out/in prefix from function signature
|
|
342
|
+
// Only add prefix if argument is an lvalue (identifier or member access)
|
|
343
|
+
const passingMode = expr.argumentPassing?.[i];
|
|
344
|
+
const prefix = passingMode && passingMode !== "value" && isLValue(arg)
|
|
345
|
+
? `${passingMode} `
|
|
346
|
+
: "";
|
|
347
|
+
args.push(`${prefix}${argFrag.text}`);
|
|
348
|
+
currentContext = ctx;
|
|
349
|
+
}
|
|
273
350
|
}
|
|
274
351
|
}
|
|
275
352
|
const callOp = expr.isOptional ? "?." : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/expressions/calls.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/expressions/calls.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,10 @@ export declare const emitArray: (expr: Extract<IrExpression, {
|
|
|
12
12
|
/**
|
|
13
13
|
* Emit an object literal
|
|
14
14
|
*
|
|
15
|
-
* Handles
|
|
15
|
+
* Handles three cases based on contextual type and structure:
|
|
16
16
|
* 1. Dictionary type (Record<K,V> or index signature) → Dictionary<string, T> initializer
|
|
17
|
-
* 2.
|
|
17
|
+
* 2. Object with spreads → IIFE pattern: (() => { var __tmp = new T(); ... return __tmp; })()
|
|
18
|
+
* 3. Nominal type (interface, class) → new TypeName { prop = value, ... }
|
|
18
19
|
*
|
|
19
20
|
* Anonymous object types should be caught by validation (TSN7403) before reaching here.
|
|
20
21
|
*
|
|
@@ -1 +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;
|
|
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;AAsB7D;;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,CAqMjC,CAAC;AAEF;;;;;;;;;;;;;GAaG;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,CAoGjC,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { emitType } from "../type-emitter.js";
|
|
5
5
|
import { emitExpression } from "../expression-emitter.js";
|
|
6
|
-
import { getPropertyType } from "../core/type-resolution.js";
|
|
6
|
+
import { getPropertyType, stripNullish, resolveTypeAlias, selectUnionMemberForObjectLiteral, } from "../core/type-resolution.js";
|
|
7
7
|
/**
|
|
8
8
|
* Escape a string for use in a C# string literal.
|
|
9
9
|
* Handles backslashes, quotes, newlines, carriage returns, and tabs.
|
|
@@ -18,34 +18,25 @@ const escapeCSharpString = (str) => str
|
|
|
18
18
|
* Emit an array literal
|
|
19
19
|
*/
|
|
20
20
|
export const emitArray = (expr, context, expectedType) => {
|
|
21
|
+
// Resolve type alias to check for tuple types
|
|
22
|
+
// (e.g., type Point = [number, number] → resolve Point to the tuple type)
|
|
23
|
+
const resolvedExpectedType = expectedType
|
|
24
|
+
? resolveTypeAlias(expectedType, context)
|
|
25
|
+
: undefined;
|
|
26
|
+
// Check if expected type is a tuple - emit as ValueTuple
|
|
27
|
+
if (resolvedExpectedType?.kind === "tupleType") {
|
|
28
|
+
return emitTupleLiteral(expr, context, resolvedExpectedType);
|
|
29
|
+
}
|
|
30
|
+
// Check if inferred type is a tuple (already resolved in frontend)
|
|
31
|
+
if (expr.inferredType?.kind === "tupleType") {
|
|
32
|
+
return emitTupleLiteral(expr, context, expr.inferredType);
|
|
33
|
+
}
|
|
21
34
|
let currentContext = context;
|
|
22
35
|
const elements = [];
|
|
23
36
|
// Determine element type from expected type or inferred type
|
|
24
37
|
let elementType = "object";
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
if (definedElements.length > 0) {
|
|
28
|
-
const allLiterals = definedElements.every((el) => el.kind === "literal");
|
|
29
|
-
if (allLiterals) {
|
|
30
|
-
const literals = definedElements;
|
|
31
|
-
// Check if all are numbers
|
|
32
|
-
const allNumbers = literals.every((lit) => typeof lit.value === "number");
|
|
33
|
-
if (allNumbers) {
|
|
34
|
-
// TypeScript `number` is always `double` in C#
|
|
35
|
-
// Even if all literals are integers, use double for TS semantics
|
|
36
|
-
elementType = "double";
|
|
37
|
-
}
|
|
38
|
-
// Check if all are strings
|
|
39
|
-
else if (literals.every((lit) => typeof lit.value === "string")) {
|
|
40
|
-
elementType = "string";
|
|
41
|
-
}
|
|
42
|
-
// Check if all are booleans
|
|
43
|
-
else if (literals.every((lit) => typeof lit.value === "boolean")) {
|
|
44
|
-
elementType = "bool";
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
// Use expected/inferred type if available (takes precedence over literal inference)
|
|
38
|
+
// Priority 1: Use explicit type annotation if provided (e.g., const arr: number[] = [1, 2, 3])
|
|
39
|
+
// This ensures the array type matches the declared variable type
|
|
49
40
|
if (expectedType) {
|
|
50
41
|
if (expectedType.kind === "arrayType") {
|
|
51
42
|
const [elemTypeStr, newContext] = emitType(expectedType.elementType, currentContext);
|
|
@@ -64,10 +55,36 @@ export const emitArray = (expr, context, expectedType) => {
|
|
|
64
55
|
}
|
|
65
56
|
}
|
|
66
57
|
}
|
|
67
|
-
// If no
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
58
|
+
// Priority 2: If no explicit type, infer from literals (e.g., const arr = [1, 2, 3])
|
|
59
|
+
// All integers → int, any decimal → double, all strings → string, all bools → bool
|
|
60
|
+
if (elementType === "object") {
|
|
61
|
+
const definedElements = expr.elements.filter((el) => el !== undefined);
|
|
62
|
+
if (definedElements.length > 0) {
|
|
63
|
+
const allLiterals = definedElements.every((el) => el.kind === "literal");
|
|
64
|
+
if (allLiterals) {
|
|
65
|
+
const literals = definedElements;
|
|
66
|
+
// Check if all are numbers
|
|
67
|
+
const allNumbers = literals.every((lit) => typeof lit.value === "number");
|
|
68
|
+
if (allNumbers) {
|
|
69
|
+
// Infer int vs double from numericIntent (based on raw lexeme)
|
|
70
|
+
// All Int32 → int, any Double → double
|
|
71
|
+
const hasDouble = literals.some((lit) => lit.numericIntent === "Double");
|
|
72
|
+
elementType = hasDouble ? "double" : "int";
|
|
73
|
+
}
|
|
74
|
+
// Check if all are strings
|
|
75
|
+
else if (literals.every((lit) => typeof lit.value === "string")) {
|
|
76
|
+
elementType = "string";
|
|
77
|
+
}
|
|
78
|
+
// Check if all are booleans
|
|
79
|
+
else if (literals.every((lit) => typeof lit.value === "boolean")) {
|
|
80
|
+
elementType = "bool";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Priority 3: Fall back to inferred type from expression
|
|
86
|
+
if (elementType === "object") {
|
|
87
|
+
if (expr.inferredType && expr.inferredType.kind === "arrayType") {
|
|
71
88
|
const [elemTypeStr, newContext] = emitType(expr.inferredType.elementType, currentContext);
|
|
72
89
|
elementType = elemTypeStr;
|
|
73
90
|
currentContext = newContext;
|
|
@@ -99,9 +116,15 @@ export const emitArray = (expr, context, expectedType) => {
|
|
|
99
116
|
currentContext = newContext;
|
|
100
117
|
}
|
|
101
118
|
}
|
|
102
|
-
//
|
|
119
|
+
// Determine whether to emit native CLR array or List
|
|
120
|
+
const runtime = currentContext.options.runtime ?? "js";
|
|
121
|
+
const shouldEmitNativeArray = runtime === "dotnet" &&
|
|
122
|
+
expectedType?.kind === "arrayType" &&
|
|
123
|
+
expectedType.origin === "explicit";
|
|
124
|
+
// Wrap in ToArray() or ToList() depending on expected type
|
|
125
|
+
const wrapperMethod = shouldEmitNativeArray ? "ToArray" : "ToList";
|
|
103
126
|
return [
|
|
104
|
-
{ text: `global::System.Linq.Enumerable
|
|
127
|
+
{ text: `global::System.Linq.Enumerable.${wrapperMethod}(${result})` },
|
|
105
128
|
currentContext,
|
|
106
129
|
];
|
|
107
130
|
}
|
|
@@ -121,18 +144,33 @@ export const emitArray = (expr, context, expectedType) => {
|
|
|
121
144
|
currentContext = newContext;
|
|
122
145
|
}
|
|
123
146
|
}
|
|
147
|
+
// Determine whether to emit native CLR array or List
|
|
148
|
+
const runtime = currentContext.options.runtime ?? "js";
|
|
149
|
+
const shouldEmitNativeArray = runtime === "dotnet" &&
|
|
150
|
+
expectedType?.kind === "arrayType" &&
|
|
151
|
+
expectedType.origin === "explicit";
|
|
152
|
+
// In dotnet mode, use new[] { } syntax to let C# infer array type
|
|
153
|
+
// This works for non-empty arrays with literal values
|
|
154
|
+
const useInferredArraySyntax = runtime === "dotnet" && elements.length > 0 && !shouldEmitNativeArray;
|
|
124
155
|
// Use constructor syntax for empty arrays, initializer syntax for non-empty
|
|
125
|
-
const text =
|
|
126
|
-
? `new
|
|
127
|
-
:
|
|
156
|
+
const text = useInferredArraySyntax
|
|
157
|
+
? `new[] { ${elements.join(", ")} }`
|
|
158
|
+
: shouldEmitNativeArray
|
|
159
|
+
? elements.length === 0
|
|
160
|
+
? `new ${elementType}[0]`
|
|
161
|
+
: `new ${elementType}[] { ${elements.join(", ")} }`
|
|
162
|
+
: elements.length === 0
|
|
163
|
+
? `new global::System.Collections.Generic.List<${elementType}>()`
|
|
164
|
+
: `new global::System.Collections.Generic.List<${elementType}> { ${elements.join(", ")} }`;
|
|
128
165
|
return [{ text }, currentContext];
|
|
129
166
|
};
|
|
130
167
|
/**
|
|
131
168
|
* Emit an object literal
|
|
132
169
|
*
|
|
133
|
-
* Handles
|
|
170
|
+
* Handles three cases based on contextual type and structure:
|
|
134
171
|
* 1. Dictionary type (Record<K,V> or index signature) → Dictionary<string, T> initializer
|
|
135
|
-
* 2.
|
|
172
|
+
* 2. Object with spreads → IIFE pattern: (() => { var __tmp = new T(); ... return __tmp; })()
|
|
173
|
+
* 3. Nominal type (interface, class) → new TypeName { prop = value, ... }
|
|
136
174
|
*
|
|
137
175
|
* Anonymous object types should be caught by validation (TSN7403) before reaching here.
|
|
138
176
|
*
|
|
@@ -148,12 +186,51 @@ export const emitObject = (expr, context, expectedType) => {
|
|
|
148
186
|
if (effectiveType?.kind === "dictionaryType") {
|
|
149
187
|
return emitDictionaryLiteral(expr, currentContext, effectiveType);
|
|
150
188
|
}
|
|
151
|
-
//
|
|
189
|
+
// Check for contextual type (from return type, variable annotation, etc.)
|
|
190
|
+
// Strip null/undefined from type - `new T? { ... }` is invalid C#, use `new T { ... }`
|
|
191
|
+
const strippedType = effectiveType
|
|
192
|
+
? stripNullish(effectiveType)
|
|
193
|
+
: undefined;
|
|
194
|
+
// Handle union type aliases: select the best-matching union member
|
|
195
|
+
// e.g., for `type Result<T,E> = { ok: true; value: T } | { ok: false; error: E }`
|
|
196
|
+
// we want to emit `new Result__0<T,E> { ... }` not `new Result<T,E> { ... }`
|
|
197
|
+
const instantiationType = (() => {
|
|
198
|
+
if (!strippedType)
|
|
199
|
+
return undefined;
|
|
200
|
+
const resolved = resolveTypeAlias(strippedType, currentContext);
|
|
201
|
+
if (resolved.kind !== "unionType")
|
|
202
|
+
return strippedType;
|
|
203
|
+
// Extract only plain string keys from the literal
|
|
204
|
+
const literalKeys = expr.properties
|
|
205
|
+
.filter((p) => p.kind === "property" && typeof p.key === "string")
|
|
206
|
+
.map((p) => p.key);
|
|
207
|
+
// If any property is not a plain string key, cannot match
|
|
208
|
+
if (literalKeys.length !== expr.properties.length)
|
|
209
|
+
return strippedType;
|
|
210
|
+
const selected = selectUnionMemberForObjectLiteral(resolved, literalKeys, currentContext);
|
|
211
|
+
return selected ?? strippedType;
|
|
212
|
+
})();
|
|
213
|
+
const [typeName, typeContext] = resolveContextualType(instantiationType, currentContext);
|
|
214
|
+
currentContext = typeContext;
|
|
215
|
+
if (!typeName) {
|
|
216
|
+
// ICE: Validation (TSN7403) should have caught anonymous object literals
|
|
217
|
+
throw new Error("ICE: Object literal without contextual type reached emitter - validation missed TSN7403");
|
|
218
|
+
}
|
|
219
|
+
// Safety net: strip trailing `?` from type name (e.g., `Option<T>?` → `Option<T>`)
|
|
220
|
+
// `new T? { ... }` is never valid C# syntax
|
|
221
|
+
const safeTypeName = typeName.endsWith("?")
|
|
222
|
+
? typeName.slice(0, -1)
|
|
223
|
+
: typeName;
|
|
224
|
+
// Check if object has spreads - use IIFE pattern for spread lowering
|
|
225
|
+
if (expr.hasSpreads) {
|
|
226
|
+
return emitObjectWithSpreads(expr, currentContext, effectiveType, safeTypeName);
|
|
227
|
+
}
|
|
228
|
+
// Regular object literal with nominal type - no spreads
|
|
152
229
|
const properties = [];
|
|
153
230
|
for (const prop of expr.properties) {
|
|
154
231
|
if (prop.kind === "spread") {
|
|
155
|
-
//
|
|
156
|
-
|
|
232
|
+
// Should not reach here if hasSpreads is correctly set
|
|
233
|
+
throw new Error("ICE: Spread in object literal but hasSpreads is false");
|
|
157
234
|
}
|
|
158
235
|
else {
|
|
159
236
|
const key = typeof prop.key === "string" ? prop.key : "/* computed */";
|
|
@@ -166,15 +243,105 @@ export const emitObject = (expr, context, expectedType) => {
|
|
|
166
243
|
currentContext = newContext;
|
|
167
244
|
}
|
|
168
245
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
246
|
+
const text = `new ${safeTypeName} { ${properties.join(", ")} }`;
|
|
247
|
+
return [{ text }, currentContext];
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Emit an object literal with spreads using IIFE pattern.
|
|
251
|
+
*
|
|
252
|
+
* Input: { ...base, y: 2 }
|
|
253
|
+
* Output: ((global::System.Func<T>)(() => { var __tmp = new T(); __tmp.x = base.x; __tmp.y = 2.0; return __tmp; }))()
|
|
254
|
+
*
|
|
255
|
+
* Properties are set in order: spread properties first, then explicit properties.
|
|
256
|
+
* Later properties override earlier ones (JavaScript semantics).
|
|
257
|
+
*/
|
|
258
|
+
const emitObjectWithSpreads = (expr, context, effectiveType, typeName) => {
|
|
259
|
+
let currentContext = context;
|
|
260
|
+
const assignments = [];
|
|
261
|
+
for (const prop of expr.properties) {
|
|
262
|
+
if (prop.kind === "spread") {
|
|
263
|
+
// Spread: copy all properties from spread source
|
|
264
|
+
const [spreadAssignments, newContext] = emitSpreadPropertyCopies(prop.expression, currentContext);
|
|
265
|
+
assignments.push(...spreadAssignments);
|
|
266
|
+
currentContext = newContext;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// Explicit property assignment
|
|
270
|
+
const key = typeof prop.key === "string" ? prop.key : "/* computed */";
|
|
271
|
+
const propertyExpectedType = typeof prop.key === "string"
|
|
272
|
+
? getPropertyType(effectiveType, prop.key, currentContext)
|
|
273
|
+
: undefined;
|
|
274
|
+
const [valueFrag, newContext] = emitExpression(prop.value, currentContext, propertyExpectedType);
|
|
275
|
+
assignments.push(`__tmp.${key} = ${valueFrag.text}`);
|
|
276
|
+
currentContext = newContext;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Build IIFE: ((Func<T>)(() => { var __tmp = new T(); ...; return __tmp; }))()
|
|
280
|
+
const body = [
|
|
281
|
+
`var __tmp = new ${typeName}()`,
|
|
282
|
+
...assignments,
|
|
283
|
+
"return __tmp",
|
|
284
|
+
].join("; ");
|
|
285
|
+
const text = `((global::System.Func<${typeName}>)(() => { ${body}; }))()`;
|
|
286
|
+
return [{ text }, currentContext];
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* Emit property copy assignments from a spread source.
|
|
290
|
+
*
|
|
291
|
+
* For `...base` where base has type { x: number, y: string }:
|
|
292
|
+
* Returns ["__tmp.x = base.x", "__tmp.y = base.y"]
|
|
293
|
+
*/
|
|
294
|
+
const emitSpreadPropertyCopies = (spreadExpr, context) => {
|
|
295
|
+
let currentContext = context;
|
|
296
|
+
const assignments = [];
|
|
297
|
+
// Get the spread expression's type to know which properties to copy
|
|
298
|
+
const spreadType = spreadExpr.inferredType;
|
|
299
|
+
if (!spreadType) {
|
|
300
|
+
// No type info - emit a warning comment
|
|
301
|
+
const [exprFrag, newContext] = emitExpression(spreadExpr, currentContext);
|
|
302
|
+
assignments.push(`/* spread: ${exprFrag.text} (no type info) */`);
|
|
303
|
+
return [assignments, newContext];
|
|
304
|
+
}
|
|
305
|
+
// Emit the spread source expression
|
|
306
|
+
const [sourceFrag, sourceContext] = emitExpression(spreadExpr, currentContext);
|
|
307
|
+
currentContext = sourceContext;
|
|
308
|
+
const sourceExpr = sourceFrag.text;
|
|
309
|
+
// Extract properties from the spread type
|
|
310
|
+
const propertyNames = getObjectTypePropertyNames(spreadType, currentContext);
|
|
311
|
+
for (const propName of propertyNames) {
|
|
312
|
+
assignments.push(`__tmp.${propName} = ${sourceExpr}.${propName}`);
|
|
313
|
+
}
|
|
314
|
+
return [assignments, currentContext];
|
|
315
|
+
};
|
|
316
|
+
/**
|
|
317
|
+
* Get property names from an object-like type.
|
|
318
|
+
* Handles objectType, referenceType (to interfaces/classes), and resolved type aliases.
|
|
319
|
+
*/
|
|
320
|
+
const getObjectTypePropertyNames = (type, context) => {
|
|
321
|
+
// Direct object type
|
|
322
|
+
if (type.kind === "objectType") {
|
|
323
|
+
return type.members
|
|
324
|
+
.filter((m) => m.kind === "propertySignature")
|
|
325
|
+
.map((m) => m.name);
|
|
175
326
|
}
|
|
176
|
-
|
|
177
|
-
|
|
327
|
+
// Reference type - check type aliases registry
|
|
328
|
+
if (type.kind === "referenceType") {
|
|
329
|
+
const resolved = resolveTypeAlias(type, context);
|
|
330
|
+
if (resolved.kind === "objectType") {
|
|
331
|
+
return resolved.members
|
|
332
|
+
.filter((m) => m.kind === "propertySignature")
|
|
333
|
+
.map((m) => m.name);
|
|
334
|
+
}
|
|
335
|
+
// Check localTypes for interface members
|
|
336
|
+
const localType = context.localTypes?.get(type.name);
|
|
337
|
+
if (localType?.kind === "interface") {
|
|
338
|
+
return localType.members
|
|
339
|
+
.filter((m) => m.kind === "propertySignature")
|
|
340
|
+
.map((m) => m.name);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// Unknown type structure - return empty
|
|
344
|
+
return [];
|
|
178
345
|
};
|
|
179
346
|
/**
|
|
180
347
|
* Emit a dictionary literal using C# collection initializer syntax.
|
|
@@ -213,14 +380,20 @@ const emitDictionaryLiteral = (expr, context, dictType) => {
|
|
|
213
380
|
};
|
|
214
381
|
/**
|
|
215
382
|
* Emit dictionary key type.
|
|
216
|
-
*
|
|
383
|
+
* Allowed: string, number (→ double).
|
|
384
|
+
* Enforced by TSN7413.
|
|
217
385
|
*/
|
|
218
386
|
const emitDictKeyType = (keyType, context) => {
|
|
219
|
-
if (keyType.kind === "primitiveType"
|
|
220
|
-
|
|
387
|
+
if (keyType.kind === "primitiveType") {
|
|
388
|
+
switch (keyType.name) {
|
|
389
|
+
case "string":
|
|
390
|
+
return ["string", context];
|
|
391
|
+
case "number":
|
|
392
|
+
return ["double", context];
|
|
393
|
+
}
|
|
221
394
|
}
|
|
222
|
-
// ICE:
|
|
223
|
-
throw new Error(`ICE:
|
|
395
|
+
// ICE: Unsupported key type (should have been caught by TSN7413)
|
|
396
|
+
throw new Error(`ICE: Unsupported dictionary key type reached emitter - validation missed TSN7413. Got: ${JSON.stringify(keyType)}`);
|
|
224
397
|
};
|
|
225
398
|
/**
|
|
226
399
|
* Resolve contextual type to C# type string.
|
|
@@ -262,4 +435,30 @@ const resolveContextualType = (contextualType, context) => {
|
|
|
262
435
|
const [typeStr, newContext] = emitType(contextualType, context);
|
|
263
436
|
return [typeStr, newContext];
|
|
264
437
|
};
|
|
438
|
+
/**
|
|
439
|
+
* Emit a tuple literal as ValueTuple.
|
|
440
|
+
*
|
|
441
|
+
* Input: const t: [string, number] = ["hello", 42];
|
|
442
|
+
* Output: ("hello", 42.0)
|
|
443
|
+
*
|
|
444
|
+
* C# ValueTuple has implicit tuple literal syntax with parentheses.
|
|
445
|
+
*/
|
|
446
|
+
const emitTupleLiteral = (expr, context, tupleType) => {
|
|
447
|
+
let currentContext = context;
|
|
448
|
+
const elements = [];
|
|
449
|
+
const definedElements = expr.elements.filter((el) => el !== undefined);
|
|
450
|
+
// Emit each element with its expected type from the tuple type
|
|
451
|
+
for (let i = 0; i < definedElements.length; i++) {
|
|
452
|
+
const element = definedElements[i];
|
|
453
|
+
const expectedElementType = tupleType.elementTypes[i];
|
|
454
|
+
if (element) {
|
|
455
|
+
const [elemFrag, newContext] = emitExpression(element, currentContext, expectedElementType);
|
|
456
|
+
elements.push(elemFrag.text);
|
|
457
|
+
currentContext = newContext;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
// Emit as tuple literal: (elem1, elem2, ...)
|
|
461
|
+
const text = `(${elements.join(", ")})`;
|
|
462
|
+
return [{ text }, currentContext];
|
|
463
|
+
};
|
|
265
464
|
//# sourceMappingURL=collections.js.map
|