@tsonic/emitter 0.0.5 → 0.0.12
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 +6 -6
- package/dist/array.test.js.map +1 -1
- package/dist/core/imports.test.js +6 -3
- package/dist/core/imports.test.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/type-compatibility.d.ts +26 -0
- package/dist/core/type-compatibility.d.ts.map +1 -0
- package/dist/core/type-compatibility.js +109 -0
- package/dist/core/type-compatibility.js.map +1 -0
- package/dist/core/type-resolution.d.ts +81 -1
- package/dist/core/type-resolution.d.ts.map +1 -1
- package/dist/core/type-resolution.js +258 -0
- 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/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +48 -0
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +97 -13
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/calls.d.ts.map +1 -1
- package/dist/expressions/calls.js +5 -1
- 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 +214 -24
- 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 +27 -7
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index.test.js +189 -4
- package/dist/expressions/index.test.js.map +1 -1
- package/dist/expressions/literals.d.ts +4 -6
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +41 -17
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/literals.test.js +41 -0
- package/dist/expressions/literals.test.js.map +1 -1
- package/dist/expressions/operators.d.ts +4 -0
- package/dist/expressions/operators.d.ts.map +1 -1
- package/dist/expressions/operators.js +145 -12
- package/dist/expressions/operators.js.map +1 -1
- package/dist/expressions/other.d.ts.map +1 -1
- package/dist/expressions/other.js +9 -2
- 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.map +1 -1
- package/dist/golden-tests/discovery.js +15 -5
- package/dist/golden-tests/discovery.js.map +1 -1
- package/dist/golden-tests/runner.d.ts.map +1 -1
- package/dist/golden-tests/runner.js +62 -7
- package/dist/golden-tests/runner.js.map +1 -1
- package/dist/golden-tests/types.d.ts +11 -1
- package/dist/golden-tests/types.d.ts.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 +49 -2
- 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 +560 -0
- package/dist/invariants/numeric-proof-contract.test.js.map +1 -0
- package/dist/specialization/generic-functions.test.js +10 -0
- package/dist/specialization/generic-functions.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/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 +3 -1
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/control/conditionals.d.ts.map +1 -1
- package/dist/statements/control/conditionals.js +215 -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 +13 -5
- 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 +91 -25
- 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/type-aliases.d.ts.map +1 -1
- package/dist/statements/declarations/type-aliases.js +11 -1
- package/dist/statements/declarations/type-aliases.js.map +1 -1
- package/dist/statements/index.test.js +165 -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/references.d.ts.map +1 -1
- package/dist/types/references.js +128 -29
- 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 +384 -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 +3 -2
|
@@ -4,6 +4,39 @@
|
|
|
4
4
|
import { emitExpression } from "../expression-emitter.js";
|
|
5
5
|
import { isExplicitViewProperty, extractInterfaceNameFromView, } from "@tsonic/frontend/types/explicit-views.js";
|
|
6
6
|
import { escapeCSharpIdentifier } from "../emitter-types/index.js";
|
|
7
|
+
import { resolveTypeAlias, stripNullish, getAllPropertySignatures, } from "../core/type-resolution.js";
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// CONTRACT: Emitter ONLY consumes proof markers.
|
|
10
|
+
//
|
|
11
|
+
// The emitter MUST NOT re-derive numeric proofs. It only checks IR markers:
|
|
12
|
+
// - primitiveType(number).numericIntent === "Int32"
|
|
13
|
+
// - referenceType(name === "int")
|
|
14
|
+
//
|
|
15
|
+
// NO BigInt parsing, NO parseInt, NO lexeme (.raw) inspection, NO literal
|
|
16
|
+
// special-casing, NO loop-var tables. If the proof pass didn't annotate it,
|
|
17
|
+
// the emitter ICEs. Period.
|
|
18
|
+
//
|
|
19
|
+
// The numeric proof pass is the ONLY source of numeric proofs.
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Check if an expression has proven Int32 type from the numeric proof pass.
|
|
23
|
+
* The emitter MUST NOT re-derive proofs - it only checks markers set by the proof pass.
|
|
24
|
+
* This is the SINGLE source of truth for numeric proofs in the emitter.
|
|
25
|
+
*/
|
|
26
|
+
const hasInt32Proof = (expr) => {
|
|
27
|
+
// Check numericIntent from proof pass (set on primitiveType)
|
|
28
|
+
if (expr.inferredType?.kind === "primitiveType" &&
|
|
29
|
+
expr.inferredType.name === "number" &&
|
|
30
|
+
expr.inferredType.numericIntent === "Int32") {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
// Check referenceType for CLR int (from .NET interop)
|
|
34
|
+
if (expr.inferredType?.kind === "referenceType" &&
|
|
35
|
+
expr.inferredType.name === "int") {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
};
|
|
7
40
|
/**
|
|
8
41
|
* Check if an expression represents a static type reference (not an instance)
|
|
9
42
|
* Static type references are: namespace.Type or direct Type identifiers that resolve to types
|
|
@@ -58,38 +91,89 @@ export const emitMemberAccess = (expr, context) => {
|
|
|
58
91
|
// Default runtime to "js" when not specified
|
|
59
92
|
const runtime = context.options.runtime ?? "js";
|
|
60
93
|
if (expr.isComputed) {
|
|
61
|
-
// Check if this is array index access
|
|
94
|
+
// Check if this is array index access
|
|
62
95
|
const objectType = expr.object.inferredType;
|
|
63
96
|
const isArrayType = objectType?.kind === "arrayType";
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
if (isArrayType) {
|
|
97
|
+
// In JS mode, use Tsonic.JSRuntime.Array.get() for JS semantics (auto-grow, sparse arrays)
|
|
98
|
+
// In dotnet mode, use native CLR indexer (no JSRuntime exists)
|
|
99
|
+
if (isArrayType && runtime === "js") {
|
|
67
100
|
const indexContext = { ...newContext, isArrayIndex: true };
|
|
68
101
|
const [propFrag, contextWithIndex] = emitExpression(expr.property, indexContext);
|
|
69
102
|
const finalContext = { ...contextWithIndex, isArrayIndex: false };
|
|
70
103
|
const text = `global::Tsonic.JSRuntime.Array.get(${objectFrag.text}, ${propFrag.text})`;
|
|
71
104
|
return [{ text }, finalContext];
|
|
72
105
|
}
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
|
|
106
|
+
// In dotnet mode, arrays use native List<T> indexer
|
|
107
|
+
// HARD GATE: Index must be proven Int32 (validated by proof pass)
|
|
108
|
+
if (isArrayType && runtime === "dotnet") {
|
|
109
|
+
const indexContext = { ...newContext, isArrayIndex: true };
|
|
110
|
+
const [propFrag, contextWithIndex] = emitExpression(expr.property, indexContext);
|
|
111
|
+
const finalContext = { ...contextWithIndex, isArrayIndex: false };
|
|
112
|
+
const accessor = expr.isOptional ? "?[" : "[";
|
|
113
|
+
const indexExpr = expr.property;
|
|
114
|
+
if (!hasInt32Proof(indexExpr)) {
|
|
115
|
+
// ICE: Unproven index should have been caught by proof pass (TSN5107)
|
|
116
|
+
throw new Error(`Internal Compiler Error: Array index must be proven Int32. ` +
|
|
117
|
+
`Expression '${propFrag.text}' has no Int32 proof. ` +
|
|
118
|
+
`This should have been caught by the numeric proof pass (TSN5107).`);
|
|
119
|
+
}
|
|
120
|
+
const text = `${objectFrag.text}${accessor}${propFrag.text}]`;
|
|
121
|
+
return [{ text }, finalContext];
|
|
122
|
+
}
|
|
123
|
+
// CLR indexer access (non-TS-array types like List<T>, string, Dictionary, etc.)
|
|
76
124
|
const indexContext = { ...newContext, isArrayIndex: true };
|
|
77
125
|
const [propFrag, contextWithIndex] = emitExpression(expr.property, indexContext);
|
|
78
126
|
const finalContext = { ...contextWithIndex, isArrayIndex: false };
|
|
79
127
|
const accessor = expr.isOptional ? "?[" : "[";
|
|
80
|
-
// Check if
|
|
128
|
+
// Check if this is dictionary access (no cast needed - use key type directly)
|
|
129
|
+
const isDictionaryType = objectType?.kind === "dictionaryType";
|
|
130
|
+
if (isDictionaryType) {
|
|
131
|
+
// Dictionary: use key as-is (double for number keys, string for string keys)
|
|
132
|
+
const text = `${objectFrag.text}${accessor}${propFrag.text}]`;
|
|
133
|
+
return [{ text }, finalContext];
|
|
134
|
+
}
|
|
135
|
+
// HARD GATE: Non-dictionary CLR indexers (List<T>, string) require Int32 proof
|
|
81
136
|
const indexExpr = expr.property;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
137
|
+
if (!hasInt32Proof(indexExpr)) {
|
|
138
|
+
// ICE: Unproven index should have been caught by proof pass (TSN5107)
|
|
139
|
+
throw new Error(`Internal Compiler Error: CLR indexer requires Int32 index. ` +
|
|
140
|
+
`Expression '${propFrag.text}' has no Int32 proof. ` +
|
|
141
|
+
`This should have been caught by the numeric proof pass (TSN5107).`);
|
|
142
|
+
}
|
|
143
|
+
const text = `${objectFrag.text}${accessor}${propFrag.text}]`;
|
|
87
144
|
return [{ text }, finalContext];
|
|
88
145
|
}
|
|
89
146
|
// Property access
|
|
90
147
|
const prop = expr.property;
|
|
91
148
|
const objectType = expr.object.inferredType;
|
|
92
149
|
const isArrayType = objectType?.kind === "arrayType";
|
|
150
|
+
// Union member projection: u.prop → u.Match(__m1 => __m1.prop, __m2 => __m2.prop, ...)
|
|
151
|
+
// This handles accessing properties on union types where the property exists on all members.
|
|
152
|
+
// Example: account.kind where account is Union<User, Admin> and both have .kind
|
|
153
|
+
if (objectType && !expr.isOptional) {
|
|
154
|
+
const resolved = resolveTypeAlias(stripNullish(objectType), context);
|
|
155
|
+
if (resolved.kind === "unionType") {
|
|
156
|
+
const members = resolved.types;
|
|
157
|
+
const arity = members.length;
|
|
158
|
+
// Only handle unions with 2-8 members (runtime supports Union<T1..T8>)
|
|
159
|
+
if (arity >= 2 && arity <= 8) {
|
|
160
|
+
// Check if all members are reference types with the property
|
|
161
|
+
const allHaveProp = members.every((m) => {
|
|
162
|
+
if (m.kind !== "referenceType")
|
|
163
|
+
return false;
|
|
164
|
+
const props = getAllPropertySignatures(m, context);
|
|
165
|
+
return props?.some((p) => p.name === prop) ?? false;
|
|
166
|
+
});
|
|
167
|
+
if (allHaveProp) {
|
|
168
|
+
// Emit: object.Match(__m1 => __m1.prop, __m2 => __m2.prop, ...)
|
|
169
|
+
const escapedProp = escapeCSharpIdentifier(prop);
|
|
170
|
+
const lambdas = members.map((_, i) => `__m${i + 1} => __m${i + 1}.${escapedProp}`);
|
|
171
|
+
const text = `${objectFrag.text}.Match(${lambdas.join(", ")})`;
|
|
172
|
+
return [{ text }, newContext];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
93
177
|
// In JS runtime mode, rewrite array.length → global::Tsonic.JSRuntime.Array.length(array)
|
|
94
178
|
// In dotnet mode, there is no JS emulation - users access .Count directly on List<T>
|
|
95
179
|
if (isArrayType && prop === "length" && runtime === "js") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,+EAA+E;AAC/E,iDAAiD;AACjD,EAAE;AACF,4EAA4E;AAC5E,oDAAoD;AACpD,kCAAkC;AAClC,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,4BAA4B;AAC5B,EAAE;AACF,+DAA+D;AAC/D,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,IAAkB,EAAW,EAAE;IACpD,6DAA6D;IAC7D,IACE,IAAI,CAAC,YAAY,EAAE,IAAI,KAAK,eAAe;QAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ;QACnC,IAAI,CAAC,YAAY,CAAC,aAAa,KAAK,OAAO,EAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,IACE,IAAI,CAAC,YAAY,EAAE,IAAI,KAAK,eAAe;QAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,KAAK,EAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,qBAAqB,GAAG,CAC5B,IAAqD,EAC5C,EAAE;IACX,gFAAgF;IAChF,sEAAsE;IACtE,4EAA4E;IAC5E,EAAE;IACF,mFAAmF;IACnF,qFAAqF;IACrF,wDAAwD;IACxD,EAAE;IACF,mFAAmF;IACnF,iFAAiF;IACjF,EAAE;IACF,wFAAwF;IACxF,kEAAkE;IAClE,mFAAmF;IACnF,kEAAkE;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAE5C,0EAA0E;IAC1E,IACE,UAAU,EAAE,IAAI,KAAK,eAAe;QACpC,UAAU,EAAE,IAAI,KAAK,WAAW,EAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8DAA8D;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAqD,EACrD,OAAuB,EACW,EAAE;IACpC,iDAAiD;IACjD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAE5C,0DAA0D;QAC1D,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,oEAAoE;YACpE,MAAM,IAAI,GAAG,WAAW,IAAI,IAAI,MAAM,EAAE,CAAC;YACzC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9C,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;YACtD,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtE,6CAA6C;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IAEhD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAC5C,MAAM,WAAW,GAAG,UAAU,EAAE,IAAI,KAAK,WAAW,CAAC;QAErD,2FAA2F;QAC3F,+DAA+D;QAC/D,IAAI,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC3D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,cAAc,CACjD,IAAI,CAAC,QAAwB,EAC7B,YAAY,CACb,CAAC;YACF,MAAM,YAAY,GAAG,EAAE,GAAG,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAClE,MAAM,IAAI,GAAG,sCAAsC,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC;YACxF,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,oDAAoD;QACpD,kEAAkE;QAClE,IAAI,WAAW,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC3D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,cAAc,CACjD,IAAI,CAAC,QAAwB,EAC7B,YAAY,CACb,CAAC;YACF,MAAM,YAAY,GAAG,EAAE,GAAG,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAwB,CAAC;YAEhD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,sEAAsE;gBACtE,MAAM,IAAI,KAAK,CACb,6DAA6D;oBAC3D,eAAe,QAAQ,CAAC,IAAI,wBAAwB;oBACpD,mEAAmE,CACtE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC;YAC9D,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,iFAAiF;QACjF,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC3D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,cAAc,CACjD,IAAI,CAAC,QAAwB,EAC7B,YAAY,CACb,CAAC;QACF,MAAM,YAAY,GAAG,EAAE,GAAG,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAE9C,8EAA8E;QAC9E,MAAM,gBAAgB,GAAG,UAAU,EAAE,IAAI,KAAK,gBAAgB,CAAC;QAE/D,IAAI,gBAAgB,EAAE,CAAC;YACrB,6EAA6E;YAC7E,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC;YAC9D,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,+EAA+E;QAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,QAAwB,CAAC;QAEhD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,sEAAsE;YACtE,MAAM,IAAI,KAAK,CACb,6DAA6D;gBAC3D,eAAe,QAAQ,CAAC,IAAI,wBAAwB;gBACpD,mEAAmE,CACtE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9D,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,kBAAkB;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAkB,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;IAC5C,MAAM,WAAW,GAAG,UAAU,EAAE,IAAI,KAAK,WAAW,CAAC;IAErD,uFAAuF;IACvF,6FAA6F;IAC7F,gFAAgF;IAChF,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;YAE7B,uEAAuE;YACvE,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC7B,6DAA6D;gBAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACtC,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe;wBAAE,OAAO,KAAK,CAAC;oBAC7C,MAAM,KAAK,GAAG,wBAAwB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACnD,OAAO,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC;gBACtD,CAAC,CAAC,CAAC;gBAEH,IAAI,WAAW,EAAE,CAAC;oBAChB,gEAAgE;oBAChE,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;oBACjD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE,CACtD,CAAC;oBACF,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC/D,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0FAA0F;IAC1F,qFAAqF;IACrF,IAAI,WAAW,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,yCAAyC,UAAU,CAAC,IAAI,GAAG,CAAC;QACzE,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,iCAAiC;IACjC,MAAM,YAAY,GAChB,UAAU,EAAE,IAAI,KAAK,eAAe,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC;IAEvE,6FAA6F;IAC7F,mDAAmD;IACnD,IAAI,YAAY,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,0CAA0C,UAAU,CAAC,IAAI,GAAG,CAAC;QAC1E,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,4DAA4D;IAC5D,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,aAAa,EAAE,CAAC;YAClB,+CAA+C;YAC/C,0DAA0D;YAC1D,wCAAwC;YACxC,MAAM,IAAI,GAAG,KAAK,aAAa,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC;YACtD,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,GAAG,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5E,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../src/expressions/calls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAU,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA+L7D;;GAEG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7C,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../src/expressions/calls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAU,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA+L7D;;GAEG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7C,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CAyJjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,EAC5C,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CA8CjC,CAAC"}
|
|
@@ -249,11 +249,15 @@ export const emitCall = (expr, context) => {
|
|
|
249
249
|
currentContext = typeContext;
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
|
+
// Get parameter types from IR (extracted from resolved signature in frontend)
|
|
253
|
+
const parameterTypes = expr.parameterTypes ?? [];
|
|
252
254
|
const args = [];
|
|
253
255
|
for (let i = 0; i < expr.arguments.length; i++) {
|
|
254
256
|
const arg = expr.arguments[i];
|
|
255
257
|
if (!arg)
|
|
256
258
|
continue; // Skip undefined (shouldn't happen in valid IR)
|
|
259
|
+
// Get expected type for this argument from parameter types
|
|
260
|
+
const expectedType = parameterTypes[i];
|
|
257
261
|
if (arg.kind === "spread") {
|
|
258
262
|
// Spread in function call
|
|
259
263
|
const [spreadFrag, ctx] = emitExpression(arg.expression, currentContext);
|
|
@@ -261,7 +265,7 @@ export const emitCall = (expr, context) => {
|
|
|
261
265
|
currentContext = ctx;
|
|
262
266
|
}
|
|
263
267
|
else {
|
|
264
|
-
const [argFrag, ctx] = emitExpression(arg, currentContext);
|
|
268
|
+
const [argFrag, ctx] = emitExpression(arg, currentContext, expectedType);
|
|
265
269
|
// Check if this argument needs ref/out/in prefix
|
|
266
270
|
// Only add prefix if argument is an lvalue (identifier or member access)
|
|
267
271
|
const passingMode = expr.argumentPassing?.[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/expressions/calls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,IAAkB,EAAW,EAAE;IAC/C,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;AACpE,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAC3B,MAAoB,EAC4B,EAAE;IAClD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC;IAE9C,mDAAmD;IACnD,IAAI,IAAI,KAAK,iCAAiC;QAAE,OAAO,IAAI,CAAC;IAE5D,kDAAkD;IAClD,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC3D,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAE/D,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAU,EAAE;IACrD,6CAA6C;IAC7C,IACE,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;QAC9B,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,KAAK;QACjB,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,SAAS;QACrB,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,MAAM,EAClB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+DAA+D;IAC/D,6CAA6C;IAC7C,wDAAwD;IACxD,OAAO,WAAW,OAAO,EAAE,CAAC;AAC9B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAC1B,IAAwB,EACxB,OAAuB,EACjB,EAAE;IACR,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe;QAAE,OAAO;IAE7C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;IACjD,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE/C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/B,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,YAAY,GAAG,CACnB,IAA6C,EAC7C,UAAkB,EACT,EAAE;IACX,0EAA0E;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,IACE,CAAC,YAAY;QACb,YAAY,CAAC,IAAI,KAAK,eAAe;QACrC,YAAY,CAAC,IAAI,KAAK,KAAK,EAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qDAAqD;IACrD,MAAM,0BAA0B,GAAG;QACjC,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,UAAU;QACV,UAAU;QACV,WAAW;QACX,UAAU;QACV,UAAU;QACV,6BAA6B;QAC7B,4BAA4B;QAC5B,6BAA6B;KAC9B,CAAC;IAEF,OAAO,0BAA0B,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACzE,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,CAC7B,IAA6C,EAC7C,OAAuB,EACvB,MAAmC,EACD,EAAE;IACpC,IAAI,cAAc,GAAG,OAAO,CAAC;IAE7B,+CAA+C;IAC/C,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3C,mBAAmB,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,gDAAgD;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,iBAAiB,CAC/C,IAAI,CAAC,aAAa,EAClB,cAAc,CACf,CAAC;QACF,WAAW,GAAG,QAAQ,CAAC;QACvB,cAAc,GAAG,WAAW,CAAC;IAC/B,CAAC;IAED,iBAAiB;IACjB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3B,cAAc,GAAG,GAAG,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,cAAc,GAAG,GAAG,CAAC;QACvB,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAG,2CAA2C,MAAM,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACnG,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,IAA6C,EAC7C,OAAuB,EACW,EAAE;IACpC,qDAAqD;IACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,mCAAmC;IACnC,uEAAuE;IACvE,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,EACxC,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAEnD,yBAAyB;QACzB,8CAA8C;QAC9C,8CAA8C;QAC9C,8EAA8E;QAC9E,iDAAiD;QAEjD,MAAM,YAAY,GAChB,UAAU,EAAE,IAAI,KAAK,eAAe,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC;QACvE,MAAM,YAAY,GAChB,UAAU,EAAE,IAAI,KAAK,eAAe,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC;QACvE,MAAM,WAAW,GAAG,UAAU,EAAE,IAAI,KAAK,WAAW,CAAC;QAErD,MAAM,qBAAqB,GAAG,YAAY,IAAI,YAAY,IAAI,WAAW,CAAC;QAE1E,yCAAyC;QACzC,sEAAsE;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;QAChD,IAAI,qBAAqB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9C,0CAA0C;YAC1C,8CAA8C;YAC9C,IAAI,YAAoB,CAAC;YACzB,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAY,GAAG,QAAQ,CAAC;YAC1B,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACxB,YAAY,GAAG,QAAQ,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,OAAO,CAAC;YACzB,CAAC;YAED,iFAAiF;YACjF,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,cAAc,CAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,OAAO,CACR,CAAC;YACF,IAAI,cAAc,GAAG,UAAU,CAAC;YAEhC,MAAM,IAAI,GAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,gCAAgC;YAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG;oBAAE,SAAS,CAAC,gDAAgD;gBACpE,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,cAAc,CACtC,GAAG,CAAC,UAAU,EACd,cAAc,CACf,CAAC;oBACF,IAAI,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvC,cAAc,GAAG,GAAG,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;oBAC3D,iDAAiD;oBACjD,2FAA2F;oBAC3F,yEAAyE;oBACzE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClD,MAAM,MAAM,GACV,WAAW,IAAI,WAAW,KAAK,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC;wBACrD,CAAC,CAAC,GAAG,WAAW,GAAG;wBACnB,CAAC,CAAC,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtC,cAAc,GAAG,GAAG,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,4BAA4B,YAAY,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1F,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,IAAI,cAAc,GAAG,UAAU,CAAC;IAEhC,gCAAgC;IAChC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC;IAEtC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,qDAAqD;YACrD,0CAA0C;YAC1C,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,uBAAuB,CAC5D,UAAU,CAAC,IAAI,EACf,IAAI,CAAC,aAAa,EAClB,cAAc,CACf,CAAC;YACF,eAAe,GAAG,eAAe,CAAC;YAClC,cAAc,GAAG,WAAW,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,gCAAgC;YAChC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,iBAAiB,CAC/C,IAAI,CAAC,aAAa,EAClB,cAAc,CACf,CAAC;YACF,WAAW,GAAG,QAAQ,CAAC;YACvB,cAAc,GAAG,WAAW,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,SAAS,CAAC,gDAAgD;
|
|
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,CAqLjC,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,6 +18,19 @@ 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
|
|
@@ -99,9 +112,15 @@ export const emitArray = (expr, context, expectedType) => {
|
|
|
99
112
|
currentContext = newContext;
|
|
100
113
|
}
|
|
101
114
|
}
|
|
102
|
-
//
|
|
115
|
+
// Determine whether to emit native CLR array or List
|
|
116
|
+
const runtime = currentContext.options.runtime ?? "js";
|
|
117
|
+
const shouldEmitNativeArray = runtime === "dotnet" &&
|
|
118
|
+
expectedType?.kind === "arrayType" &&
|
|
119
|
+
expectedType.origin === "explicit";
|
|
120
|
+
// Wrap in ToArray() or ToList() depending on expected type
|
|
121
|
+
const wrapperMethod = shouldEmitNativeArray ? "ToArray" : "ToList";
|
|
103
122
|
return [
|
|
104
|
-
{ text: `global::System.Linq.Enumerable
|
|
123
|
+
{ text: `global::System.Linq.Enumerable.${wrapperMethod}(${result})` },
|
|
105
124
|
currentContext,
|
|
106
125
|
];
|
|
107
126
|
}
|
|
@@ -121,18 +140,28 @@ export const emitArray = (expr, context, expectedType) => {
|
|
|
121
140
|
currentContext = newContext;
|
|
122
141
|
}
|
|
123
142
|
}
|
|
143
|
+
// Determine whether to emit native CLR array or List
|
|
144
|
+
const runtime = currentContext.options.runtime ?? "js";
|
|
145
|
+
const shouldEmitNativeArray = runtime === "dotnet" &&
|
|
146
|
+
expectedType?.kind === "arrayType" &&
|
|
147
|
+
expectedType.origin === "explicit";
|
|
124
148
|
// Use constructor syntax for empty arrays, initializer syntax for non-empty
|
|
125
|
-
const text =
|
|
126
|
-
?
|
|
127
|
-
|
|
149
|
+
const text = shouldEmitNativeArray
|
|
150
|
+
? elements.length === 0
|
|
151
|
+
? `new ${elementType}[0]`
|
|
152
|
+
: `new ${elementType}[] { ${elements.join(", ")} }`
|
|
153
|
+
: elements.length === 0
|
|
154
|
+
? `new global::System.Collections.Generic.List<${elementType}>()`
|
|
155
|
+
: `new global::System.Collections.Generic.List<${elementType}> { ${elements.join(", ")} }`;
|
|
128
156
|
return [{ text }, currentContext];
|
|
129
157
|
};
|
|
130
158
|
/**
|
|
131
159
|
* Emit an object literal
|
|
132
160
|
*
|
|
133
|
-
* Handles
|
|
161
|
+
* Handles three cases based on contextual type and structure:
|
|
134
162
|
* 1. Dictionary type (Record<K,V> or index signature) → Dictionary<string, T> initializer
|
|
135
|
-
* 2.
|
|
163
|
+
* 2. Object with spreads → IIFE pattern: (() => { var __tmp = new T(); ... return __tmp; })()
|
|
164
|
+
* 3. Nominal type (interface, class) → new TypeName { prop = value, ... }
|
|
136
165
|
*
|
|
137
166
|
* Anonymous object types should be caught by validation (TSN7403) before reaching here.
|
|
138
167
|
*
|
|
@@ -148,12 +177,51 @@ export const emitObject = (expr, context, expectedType) => {
|
|
|
148
177
|
if (effectiveType?.kind === "dictionaryType") {
|
|
149
178
|
return emitDictionaryLiteral(expr, currentContext, effectiveType);
|
|
150
179
|
}
|
|
151
|
-
//
|
|
180
|
+
// Check for contextual type (from return type, variable annotation, etc.)
|
|
181
|
+
// Strip null/undefined from type - `new T? { ... }` is invalid C#, use `new T { ... }`
|
|
182
|
+
const strippedType = effectiveType
|
|
183
|
+
? stripNullish(effectiveType)
|
|
184
|
+
: undefined;
|
|
185
|
+
// Handle union type aliases: select the best-matching union member
|
|
186
|
+
// e.g., for `type Result<T,E> = { ok: true; value: T } | { ok: false; error: E }`
|
|
187
|
+
// we want to emit `new Result__0<T,E> { ... }` not `new Result<T,E> { ... }`
|
|
188
|
+
const instantiationType = (() => {
|
|
189
|
+
if (!strippedType)
|
|
190
|
+
return undefined;
|
|
191
|
+
const resolved = resolveTypeAlias(strippedType, currentContext);
|
|
192
|
+
if (resolved.kind !== "unionType")
|
|
193
|
+
return strippedType;
|
|
194
|
+
// Extract only plain string keys from the literal
|
|
195
|
+
const literalKeys = expr.properties
|
|
196
|
+
.filter((p) => p.kind === "property" && typeof p.key === "string")
|
|
197
|
+
.map((p) => p.key);
|
|
198
|
+
// If any property is not a plain string key, cannot match
|
|
199
|
+
if (literalKeys.length !== expr.properties.length)
|
|
200
|
+
return strippedType;
|
|
201
|
+
const selected = selectUnionMemberForObjectLiteral(resolved, literalKeys, currentContext);
|
|
202
|
+
return selected ?? strippedType;
|
|
203
|
+
})();
|
|
204
|
+
const [typeName, typeContext] = resolveContextualType(instantiationType, currentContext);
|
|
205
|
+
currentContext = typeContext;
|
|
206
|
+
if (!typeName) {
|
|
207
|
+
// ICE: Validation (TSN7403) should have caught anonymous object literals
|
|
208
|
+
throw new Error("ICE: Object literal without contextual type reached emitter - validation missed TSN7403");
|
|
209
|
+
}
|
|
210
|
+
// Safety net: strip trailing `?` from type name (e.g., `Option<T>?` → `Option<T>`)
|
|
211
|
+
// `new T? { ... }` is never valid C# syntax
|
|
212
|
+
const safeTypeName = typeName.endsWith("?")
|
|
213
|
+
? typeName.slice(0, -1)
|
|
214
|
+
: typeName;
|
|
215
|
+
// Check if object has spreads - use IIFE pattern for spread lowering
|
|
216
|
+
if (expr.hasSpreads) {
|
|
217
|
+
return emitObjectWithSpreads(expr, currentContext, effectiveType, safeTypeName);
|
|
218
|
+
}
|
|
219
|
+
// Regular object literal with nominal type - no spreads
|
|
152
220
|
const properties = [];
|
|
153
221
|
for (const prop of expr.properties) {
|
|
154
222
|
if (prop.kind === "spread") {
|
|
155
|
-
//
|
|
156
|
-
|
|
223
|
+
// Should not reach here if hasSpreads is correctly set
|
|
224
|
+
throw new Error("ICE: Spread in object literal but hasSpreads is false");
|
|
157
225
|
}
|
|
158
226
|
else {
|
|
159
227
|
const key = typeof prop.key === "string" ? prop.key : "/* computed */";
|
|
@@ -166,15 +234,105 @@ export const emitObject = (expr, context, expectedType) => {
|
|
|
166
234
|
currentContext = newContext;
|
|
167
235
|
}
|
|
168
236
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
237
|
+
const text = `new ${safeTypeName} { ${properties.join(", ")} }`;
|
|
238
|
+
return [{ text }, currentContext];
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Emit an object literal with spreads using IIFE pattern.
|
|
242
|
+
*
|
|
243
|
+
* Input: { ...base, y: 2 }
|
|
244
|
+
* Output: ((global::System.Func<T>)(() => { var __tmp = new T(); __tmp.x = base.x; __tmp.y = 2.0; return __tmp; }))()
|
|
245
|
+
*
|
|
246
|
+
* Properties are set in order: spread properties first, then explicit properties.
|
|
247
|
+
* Later properties override earlier ones (JavaScript semantics).
|
|
248
|
+
*/
|
|
249
|
+
const emitObjectWithSpreads = (expr, context, effectiveType, typeName) => {
|
|
250
|
+
let currentContext = context;
|
|
251
|
+
const assignments = [];
|
|
252
|
+
for (const prop of expr.properties) {
|
|
253
|
+
if (prop.kind === "spread") {
|
|
254
|
+
// Spread: copy all properties from spread source
|
|
255
|
+
const [spreadAssignments, newContext] = emitSpreadPropertyCopies(prop.expression, currentContext);
|
|
256
|
+
assignments.push(...spreadAssignments);
|
|
257
|
+
currentContext = newContext;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
// Explicit property assignment
|
|
261
|
+
const key = typeof prop.key === "string" ? prop.key : "/* computed */";
|
|
262
|
+
const propertyExpectedType = typeof prop.key === "string"
|
|
263
|
+
? getPropertyType(effectiveType, prop.key, currentContext)
|
|
264
|
+
: undefined;
|
|
265
|
+
const [valueFrag, newContext] = emitExpression(prop.value, currentContext, propertyExpectedType);
|
|
266
|
+
assignments.push(`__tmp.${key} = ${valueFrag.text}`);
|
|
267
|
+
currentContext = newContext;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Build IIFE: ((Func<T>)(() => { var __tmp = new T(); ...; return __tmp; }))()
|
|
271
|
+
const body = [
|
|
272
|
+
`var __tmp = new ${typeName}()`,
|
|
273
|
+
...assignments,
|
|
274
|
+
"return __tmp",
|
|
275
|
+
].join("; ");
|
|
276
|
+
const text = `((global::System.Func<${typeName}>)(() => { ${body}; }))()`;
|
|
277
|
+
return [{ text }, currentContext];
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* Emit property copy assignments from a spread source.
|
|
281
|
+
*
|
|
282
|
+
* For `...base` where base has type { x: number, y: string }:
|
|
283
|
+
* Returns ["__tmp.x = base.x", "__tmp.y = base.y"]
|
|
284
|
+
*/
|
|
285
|
+
const emitSpreadPropertyCopies = (spreadExpr, context) => {
|
|
286
|
+
let currentContext = context;
|
|
287
|
+
const assignments = [];
|
|
288
|
+
// Get the spread expression's type to know which properties to copy
|
|
289
|
+
const spreadType = spreadExpr.inferredType;
|
|
290
|
+
if (!spreadType) {
|
|
291
|
+
// No type info - emit a warning comment
|
|
292
|
+
const [exprFrag, newContext] = emitExpression(spreadExpr, currentContext);
|
|
293
|
+
assignments.push(`/* spread: ${exprFrag.text} (no type info) */`);
|
|
294
|
+
return [assignments, newContext];
|
|
295
|
+
}
|
|
296
|
+
// Emit the spread source expression
|
|
297
|
+
const [sourceFrag, sourceContext] = emitExpression(spreadExpr, currentContext);
|
|
298
|
+
currentContext = sourceContext;
|
|
299
|
+
const sourceExpr = sourceFrag.text;
|
|
300
|
+
// Extract properties from the spread type
|
|
301
|
+
const propertyNames = getObjectTypePropertyNames(spreadType, currentContext);
|
|
302
|
+
for (const propName of propertyNames) {
|
|
303
|
+
assignments.push(`__tmp.${propName} = ${sourceExpr}.${propName}`);
|
|
304
|
+
}
|
|
305
|
+
return [assignments, currentContext];
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* Get property names from an object-like type.
|
|
309
|
+
* Handles objectType, referenceType (to interfaces/classes), and resolved type aliases.
|
|
310
|
+
*/
|
|
311
|
+
const getObjectTypePropertyNames = (type, context) => {
|
|
312
|
+
// Direct object type
|
|
313
|
+
if (type.kind === "objectType") {
|
|
314
|
+
return type.members
|
|
315
|
+
.filter((m) => m.kind === "propertySignature")
|
|
316
|
+
.map((m) => m.name);
|
|
317
|
+
}
|
|
318
|
+
// Reference type - check type aliases registry
|
|
319
|
+
if (type.kind === "referenceType") {
|
|
320
|
+
const resolved = resolveTypeAlias(type, context);
|
|
321
|
+
if (resolved.kind === "objectType") {
|
|
322
|
+
return resolved.members
|
|
323
|
+
.filter((m) => m.kind === "propertySignature")
|
|
324
|
+
.map((m) => m.name);
|
|
325
|
+
}
|
|
326
|
+
// Check localTypes for interface members
|
|
327
|
+
const localType = context.localTypes?.get(type.name);
|
|
328
|
+
if (localType?.kind === "interface") {
|
|
329
|
+
return localType.members
|
|
330
|
+
.filter((m) => m.kind === "propertySignature")
|
|
331
|
+
.map((m) => m.name);
|
|
332
|
+
}
|
|
175
333
|
}
|
|
176
|
-
|
|
177
|
-
return [
|
|
334
|
+
// Unknown type structure - return empty
|
|
335
|
+
return [];
|
|
178
336
|
};
|
|
179
337
|
/**
|
|
180
338
|
* Emit a dictionary literal using C# collection initializer syntax.
|
|
@@ -213,14 +371,20 @@ const emitDictionaryLiteral = (expr, context, dictType) => {
|
|
|
213
371
|
};
|
|
214
372
|
/**
|
|
215
373
|
* Emit dictionary key type.
|
|
216
|
-
*
|
|
374
|
+
* Allowed: string, number (→ double).
|
|
375
|
+
* Enforced by TSN7413.
|
|
217
376
|
*/
|
|
218
377
|
const emitDictKeyType = (keyType, context) => {
|
|
219
|
-
if (keyType.kind === "primitiveType"
|
|
220
|
-
|
|
378
|
+
if (keyType.kind === "primitiveType") {
|
|
379
|
+
switch (keyType.name) {
|
|
380
|
+
case "string":
|
|
381
|
+
return ["string", context];
|
|
382
|
+
case "number":
|
|
383
|
+
return ["double", context];
|
|
384
|
+
}
|
|
221
385
|
}
|
|
222
|
-
// ICE:
|
|
223
|
-
throw new Error(`ICE:
|
|
386
|
+
// ICE: Unsupported key type (should have been caught by TSN7413)
|
|
387
|
+
throw new Error(`ICE: Unsupported dictionary key type reached emitter - validation missed TSN7413. Got: ${JSON.stringify(keyType)}`);
|
|
224
388
|
};
|
|
225
389
|
/**
|
|
226
390
|
* Resolve contextual type to C# type string.
|
|
@@ -262,4 +426,30 @@ const resolveContextualType = (contextualType, context) => {
|
|
|
262
426
|
const [typeStr, newContext] = emitType(contextualType, context);
|
|
263
427
|
return [typeStr, newContext];
|
|
264
428
|
};
|
|
429
|
+
/**
|
|
430
|
+
* Emit a tuple literal as ValueTuple.
|
|
431
|
+
*
|
|
432
|
+
* Input: const t: [string, number] = ["hello", 42];
|
|
433
|
+
* Output: ("hello", 42.0)
|
|
434
|
+
*
|
|
435
|
+
* C# ValueTuple has implicit tuple literal syntax with parentheses.
|
|
436
|
+
*/
|
|
437
|
+
const emitTupleLiteral = (expr, context, tupleType) => {
|
|
438
|
+
let currentContext = context;
|
|
439
|
+
const elements = [];
|
|
440
|
+
const definedElements = expr.elements.filter((el) => el !== undefined);
|
|
441
|
+
// Emit each element with its expected type from the tuple type
|
|
442
|
+
for (let i = 0; i < definedElements.length; i++) {
|
|
443
|
+
const element = definedElements[i];
|
|
444
|
+
const expectedElementType = tupleType.elementTypes[i];
|
|
445
|
+
if (element) {
|
|
446
|
+
const [elemFrag, newContext] = emitExpression(element, currentContext, expectedElementType);
|
|
447
|
+
elements.push(elemFrag.text);
|
|
448
|
+
currentContext = newContext;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// Emit as tuple literal: (elem1, elem2, ...)
|
|
452
|
+
const text = `(${elements.join(", ")})`;
|
|
453
|
+
return [{ text }, currentContext];
|
|
454
|
+
};
|
|
265
455
|
//# sourceMappingURL=collections.js.map
|