@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
package/dist/types/references.js
CHANGED
|
@@ -5,6 +5,65 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { emitType } from "./emitter.js";
|
|
7
7
|
import { isNestedType, tsCSharpNestedTypeName, } from "@tsonic/frontend/types/nested-types.js";
|
|
8
|
+
import { substituteTypeArgs } from "../core/type-resolution.js";
|
|
9
|
+
/**
|
|
10
|
+
* C# primitive type names that can be emitted directly without qualification.
|
|
11
|
+
* These correspond to the types defined in @tsonic/core package.
|
|
12
|
+
*/
|
|
13
|
+
const CSHARP_PRIMITIVES = new Set([
|
|
14
|
+
// Signed integers (from @tsonic/core)
|
|
15
|
+
"sbyte",
|
|
16
|
+
"short",
|
|
17
|
+
"int",
|
|
18
|
+
"long",
|
|
19
|
+
"nint",
|
|
20
|
+
"int128",
|
|
21
|
+
// Unsigned integers (from @tsonic/core)
|
|
22
|
+
"byte",
|
|
23
|
+
"ushort",
|
|
24
|
+
"uint",
|
|
25
|
+
"ulong",
|
|
26
|
+
"nuint",
|
|
27
|
+
"uint128",
|
|
28
|
+
// Floating-point (from @tsonic/core)
|
|
29
|
+
"half",
|
|
30
|
+
"float",
|
|
31
|
+
"double",
|
|
32
|
+
"decimal",
|
|
33
|
+
// Other primitives (from @tsonic/core)
|
|
34
|
+
"bool",
|
|
35
|
+
"char",
|
|
36
|
+
// Additional C# keywords that are valid type names
|
|
37
|
+
"string",
|
|
38
|
+
"object",
|
|
39
|
+
"void",
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* Normalize a CLR type name to global:: format
|
|
43
|
+
*/
|
|
44
|
+
const toGlobalClr = (clr) => {
|
|
45
|
+
const trimmed = clr.trim();
|
|
46
|
+
return trimmed.startsWith("global::") ? trimmed : `global::${trimmed}`;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Extract CLR name from a binding object.
|
|
50
|
+
* Handles both tsbindgen format (clrName) and internal format (name).
|
|
51
|
+
*/
|
|
52
|
+
const getBindingClrName = (b) => {
|
|
53
|
+
if (!b || typeof b !== "object")
|
|
54
|
+
return undefined;
|
|
55
|
+
// tsbindgen TypeBinding: { clrName: "System.Action", tsEmitName: "Action", ... }
|
|
56
|
+
const maybeClrName = b.clrName;
|
|
57
|
+
if (typeof maybeClrName === "string" && maybeClrName.length > 0) {
|
|
58
|
+
return maybeClrName;
|
|
59
|
+
}
|
|
60
|
+
// internal TypeBinding: { name: "System.Console", alias: "Console", ... }
|
|
61
|
+
const maybeName = b.name;
|
|
62
|
+
if (typeof maybeName === "string" && maybeName.length > 0) {
|
|
63
|
+
return maybeName;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
};
|
|
8
67
|
/**
|
|
9
68
|
* Check if a type name indicates an unsupported support type.
|
|
10
69
|
*
|
|
@@ -33,6 +92,24 @@ const checkUnsupportedSupportType = (typeName) => {
|
|
|
33
92
|
*/
|
|
34
93
|
export const emitReferenceType = (type, context) => {
|
|
35
94
|
const { name, typeArguments, resolvedClrType } = type;
|
|
95
|
+
// Check if this is a local type alias for a tuple type - must resolve since C# has no type alias for ValueTuple
|
|
96
|
+
// Tuple type aliases: RESOLVE to ValueTuple<...> (C# has no equivalent type alias syntax)
|
|
97
|
+
// Union/intersection type aliases: PRESERVE names for readability (emitted as comments elsewhere)
|
|
98
|
+
// Object type aliases: PRESERVE names (emitted as classes)
|
|
99
|
+
const typeInfo = context.localTypes?.get(name);
|
|
100
|
+
if (typeInfo && typeInfo.kind === "typeAlias") {
|
|
101
|
+
const underlyingKind = typeInfo.type.kind;
|
|
102
|
+
// Only resolve tuple type aliases - all others preserve their names
|
|
103
|
+
const shouldResolve = underlyingKind === "tupleType";
|
|
104
|
+
if (shouldResolve) {
|
|
105
|
+
// Substitute type arguments if present
|
|
106
|
+
const underlyingType = typeArguments && typeArguments.length > 0
|
|
107
|
+
? substituteTypeArgs(typeInfo.type, typeInfo.typeParameters, typeArguments)
|
|
108
|
+
: typeInfo.type;
|
|
109
|
+
return emitType(underlyingType, context);
|
|
110
|
+
}
|
|
111
|
+
// For union types, object types, etc. - fall through and emit the alias name
|
|
112
|
+
}
|
|
36
113
|
// If the type has a pre-resolved CLR type (from IR), use it
|
|
37
114
|
if (resolvedClrType) {
|
|
38
115
|
if (typeArguments && typeArguments.length > 0) {
|
|
@@ -107,20 +184,31 @@ export const emitReferenceType = (type, context) => {
|
|
|
107
184
|
if (name === "Promise") {
|
|
108
185
|
return ["global::System.Threading.Tasks.Task", context];
|
|
109
186
|
}
|
|
187
|
+
// NOTE: Map and Set are in js-globals but not in base globals.
|
|
188
|
+
// They must be explicitly imported in dotnet mode or will fail as unresolved types.
|
|
189
|
+
// Per Alice's decision: no ambient Map/Set handling in dotnet mode.
|
|
190
|
+
// Get runtime mode for conditional mappings
|
|
191
|
+
const runtime = context.options.runtime ?? "js";
|
|
110
192
|
// Map common JS types to .NET equivalents
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
if (name
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
193
|
+
// Only types actually defined in the globals packages
|
|
194
|
+
// Error: only in js-globals (not in base globals)
|
|
195
|
+
// PromiseLike: in base globals (available in both modes)
|
|
196
|
+
if (name === "Error" && runtime === "js") {
|
|
197
|
+
return ["global::System.Exception", context];
|
|
198
|
+
}
|
|
199
|
+
if (name === "PromiseLike") {
|
|
200
|
+
// PromiseLike is in both globals packages - safe to map unconditionally
|
|
201
|
+
return ["global::System.Threading.Tasks.Task", context];
|
|
202
|
+
}
|
|
203
|
+
// Resolve external types via binding registry (must be fully qualified)
|
|
204
|
+
// This handles types from contextual inference (e.g., Action from Parallel.invoke)
|
|
205
|
+
const regBinding = context.bindingsRegistry?.get(name);
|
|
206
|
+
if (regBinding) {
|
|
207
|
+
const clr = getBindingClrName(regBinding);
|
|
208
|
+
if (!clr) {
|
|
209
|
+
throw new Error(`ICE: Binding for '${name}' has no CLR name`);
|
|
121
210
|
}
|
|
122
|
-
|
|
123
|
-
const fqnType = `global::${csharpType}`;
|
|
211
|
+
const qualified = toGlobalClr(clr);
|
|
124
212
|
if (typeArguments && typeArguments.length > 0) {
|
|
125
213
|
const typeParams = [];
|
|
126
214
|
let currentContext = context;
|
|
@@ -129,26 +217,44 @@ export const emitReferenceType = (type, context) => {
|
|
|
129
217
|
typeParams.push(paramType);
|
|
130
218
|
currentContext = newContext;
|
|
131
219
|
}
|
|
132
|
-
return [`${
|
|
133
|
-
}
|
|
134
|
-
return [fqnType, context];
|
|
135
|
-
}
|
|
136
|
-
// Handle type arguments for other reference types
|
|
137
|
-
if (typeArguments && typeArguments.length > 0) {
|
|
138
|
-
const typeParams = [];
|
|
139
|
-
let currentContext = context;
|
|
140
|
-
for (const typeArg of typeArguments) {
|
|
141
|
-
const [paramType, newContext] = emitType(typeArg, currentContext);
|
|
142
|
-
typeParams.push(paramType);
|
|
143
|
-
currentContext = newContext;
|
|
220
|
+
return [`${qualified}<${typeParams.join(", ")}>`, currentContext];
|
|
144
221
|
}
|
|
222
|
+
return [qualified, context];
|
|
223
|
+
}
|
|
224
|
+
// C# primitive types can be emitted directly
|
|
225
|
+
if (CSHARP_PRIMITIVES.has(name)) {
|
|
226
|
+
return [name, context];
|
|
227
|
+
}
|
|
228
|
+
// Type parameters in scope can be emitted directly
|
|
229
|
+
if (context.typeParameters?.has(name)) {
|
|
230
|
+
return [name, context];
|
|
231
|
+
}
|
|
232
|
+
// FALLTHROUGH is only permitted for local types.
|
|
233
|
+
// Emitting a bare external name is unsound and forbidden.
|
|
234
|
+
const localTypeInfo = context.localTypes?.get(name);
|
|
235
|
+
if (localTypeInfo) {
|
|
145
236
|
// Convert nested type names (Outer$Inner → Outer.Inner)
|
|
146
|
-
|
|
147
|
-
|
|
237
|
+
let csharpName = isNestedType(name) ? tsCSharpNestedTypeName(name) : name;
|
|
238
|
+
// Type aliases with objectType underlying type are emitted as classes with __Alias suffix
|
|
239
|
+
// (per spec/16-types-and-interfaces.md §3.4)
|
|
240
|
+
if (localTypeInfo.kind === "typeAlias" &&
|
|
241
|
+
localTypeInfo.type.kind === "objectType") {
|
|
242
|
+
csharpName = `${csharpName}__Alias`;
|
|
243
|
+
}
|
|
244
|
+
if (typeArguments && typeArguments.length > 0) {
|
|
245
|
+
const typeParams = [];
|
|
246
|
+
let currentContext = context;
|
|
247
|
+
for (const typeArg of typeArguments) {
|
|
248
|
+
const [paramType, newContext] = emitType(typeArg, currentContext);
|
|
249
|
+
typeParams.push(paramType);
|
|
250
|
+
currentContext = newContext;
|
|
251
|
+
}
|
|
252
|
+
return [`${csharpName}<${typeParams.join(", ")}>`, currentContext];
|
|
253
|
+
}
|
|
254
|
+
return [csharpName, context];
|
|
148
255
|
}
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
return [csharpName, context];
|
|
256
|
+
// Hard failure: unresolved external reference type
|
|
257
|
+
// This should never happen if the IR soundness gate is working correctly
|
|
258
|
+
throw new Error(`ICE: Unresolved reference type '${name}' (no resolvedClrType, no import binding, no registry binding, not local)`);
|
|
153
259
|
};
|
|
154
260
|
//# sourceMappingURL=references.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/types/references.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/types/references.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Reference Type Emission
|
|
3
|
+
*
|
|
4
|
+
* Tests:
|
|
5
|
+
* - bindingsRegistry lookup for CLR types
|
|
6
|
+
* - C# primitive type passthrough
|
|
7
|
+
* - Local type passthrough
|
|
8
|
+
* - Hard failure for unresolved external types
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=references.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.test.d.ts","sourceRoot":"","sources":["../../src/types/references.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Reference Type Emission
|
|
3
|
+
*
|
|
4
|
+
* Tests:
|
|
5
|
+
* - bindingsRegistry lookup for CLR types
|
|
6
|
+
* - C# primitive type passthrough
|
|
7
|
+
* - Local type passthrough
|
|
8
|
+
* - Hard failure for unresolved external types
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it } from "mocha";
|
|
11
|
+
import { expect } from "chai";
|
|
12
|
+
import { emitModule } from "../emitter.js";
|
|
13
|
+
/**
|
|
14
|
+
* Helper to create a minimal module with a variable declaration of a given type
|
|
15
|
+
*/
|
|
16
|
+
const createModuleWithType = (varType) => ({
|
|
17
|
+
kind: "module",
|
|
18
|
+
filePath: "/src/test.ts",
|
|
19
|
+
namespace: "Test",
|
|
20
|
+
className: "test",
|
|
21
|
+
isStaticContainer: true,
|
|
22
|
+
imports: [],
|
|
23
|
+
body: [
|
|
24
|
+
{
|
|
25
|
+
kind: "variableDeclaration",
|
|
26
|
+
declarationKind: "const",
|
|
27
|
+
isExported: false,
|
|
28
|
+
declarations: [
|
|
29
|
+
{
|
|
30
|
+
kind: "variableDeclarator",
|
|
31
|
+
name: { kind: "identifierPattern", name: "x" },
|
|
32
|
+
type: varType,
|
|
33
|
+
initializer: { kind: "literal", value: null },
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
exports: [],
|
|
39
|
+
});
|
|
40
|
+
describe("Reference Type Emission", () => {
|
|
41
|
+
describe("C# Primitive Types", () => {
|
|
42
|
+
it("should emit int without qualification", () => {
|
|
43
|
+
const module = createModuleWithType({
|
|
44
|
+
kind: "referenceType",
|
|
45
|
+
name: "int",
|
|
46
|
+
});
|
|
47
|
+
const result = emitModule(module);
|
|
48
|
+
expect(result).to.include("int x");
|
|
49
|
+
});
|
|
50
|
+
it("should emit long without qualification", () => {
|
|
51
|
+
const module = createModuleWithType({
|
|
52
|
+
kind: "referenceType",
|
|
53
|
+
name: "long",
|
|
54
|
+
});
|
|
55
|
+
const result = emitModule(module);
|
|
56
|
+
expect(result).to.include("long x");
|
|
57
|
+
});
|
|
58
|
+
it("should emit double without qualification", () => {
|
|
59
|
+
const module = createModuleWithType({
|
|
60
|
+
kind: "referenceType",
|
|
61
|
+
name: "double",
|
|
62
|
+
});
|
|
63
|
+
const result = emitModule(module);
|
|
64
|
+
expect(result).to.include("double x");
|
|
65
|
+
});
|
|
66
|
+
it("should emit decimal without qualification", () => {
|
|
67
|
+
const module = createModuleWithType({
|
|
68
|
+
kind: "referenceType",
|
|
69
|
+
name: "decimal",
|
|
70
|
+
});
|
|
71
|
+
const result = emitModule(module);
|
|
72
|
+
expect(result).to.include("decimal x");
|
|
73
|
+
});
|
|
74
|
+
it("should emit bool without qualification", () => {
|
|
75
|
+
const module = createModuleWithType({
|
|
76
|
+
kind: "referenceType",
|
|
77
|
+
name: "bool",
|
|
78
|
+
});
|
|
79
|
+
const result = emitModule(module);
|
|
80
|
+
expect(result).to.include("bool x");
|
|
81
|
+
});
|
|
82
|
+
it("should emit nint (native int) without qualification", () => {
|
|
83
|
+
const module = createModuleWithType({
|
|
84
|
+
kind: "referenceType",
|
|
85
|
+
name: "nint",
|
|
86
|
+
});
|
|
87
|
+
const result = emitModule(module);
|
|
88
|
+
expect(result).to.include("nint x");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("Known Builtin Types", () => {
|
|
92
|
+
it("should emit Array<T> as List<T>", () => {
|
|
93
|
+
const module = createModuleWithType({
|
|
94
|
+
kind: "referenceType",
|
|
95
|
+
name: "Array",
|
|
96
|
+
typeArguments: [{ kind: "primitiveType", name: "number" }],
|
|
97
|
+
});
|
|
98
|
+
const result = emitModule(module);
|
|
99
|
+
expect(result).to.include("global::System.Collections.Generic.List<double>");
|
|
100
|
+
});
|
|
101
|
+
it("should emit Promise<T> as Task<T>", () => {
|
|
102
|
+
const module = createModuleWithType({
|
|
103
|
+
kind: "referenceType",
|
|
104
|
+
name: "Promise",
|
|
105
|
+
typeArguments: [{ kind: "primitiveType", name: "string" }],
|
|
106
|
+
});
|
|
107
|
+
const result = emitModule(module);
|
|
108
|
+
expect(result).to.include("global::System.Threading.Tasks.Task<string>");
|
|
109
|
+
});
|
|
110
|
+
it("should emit Error as System.Exception in js mode (default)", () => {
|
|
111
|
+
const module = createModuleWithType({
|
|
112
|
+
kind: "referenceType",
|
|
113
|
+
name: "Error",
|
|
114
|
+
});
|
|
115
|
+
// Default runtime is "js"
|
|
116
|
+
const result = emitModule(module);
|
|
117
|
+
expect(result).to.include("global::System.Exception");
|
|
118
|
+
});
|
|
119
|
+
it("should emit Error as System.Exception in js mode (explicit)", () => {
|
|
120
|
+
const module = createModuleWithType({
|
|
121
|
+
kind: "referenceType",
|
|
122
|
+
name: "Error",
|
|
123
|
+
});
|
|
124
|
+
const result = emitModule(module, { runtime: "js" });
|
|
125
|
+
expect(result).to.include("global::System.Exception");
|
|
126
|
+
});
|
|
127
|
+
it("should fail for Error in dotnet mode (not in base globals)", () => {
|
|
128
|
+
const module = createModuleWithType({
|
|
129
|
+
kind: "referenceType",
|
|
130
|
+
name: "Error",
|
|
131
|
+
});
|
|
132
|
+
// Error is not in base globals, so it should fail as unresolved
|
|
133
|
+
expect(() => emitModule(module, { runtime: "dotnet" })).to.throw("ICE: Unresolved reference type 'Error'");
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe("Pre-resolved CLR Types", () => {
|
|
137
|
+
it("should use resolvedClrType when present", () => {
|
|
138
|
+
const module = createModuleWithType({
|
|
139
|
+
kind: "referenceType",
|
|
140
|
+
name: "Action",
|
|
141
|
+
resolvedClrType: "global::System.Action",
|
|
142
|
+
});
|
|
143
|
+
const result = emitModule(module);
|
|
144
|
+
expect(result).to.include("global::System.Action");
|
|
145
|
+
});
|
|
146
|
+
it("should use resolvedClrType with type arguments", () => {
|
|
147
|
+
const module = createModuleWithType({
|
|
148
|
+
kind: "referenceType",
|
|
149
|
+
name: "Func",
|
|
150
|
+
resolvedClrType: "global::System.Func",
|
|
151
|
+
typeArguments: [
|
|
152
|
+
{ kind: "primitiveType", name: "string" },
|
|
153
|
+
{ kind: "primitiveType", name: "number" },
|
|
154
|
+
],
|
|
155
|
+
});
|
|
156
|
+
const result = emitModule(module);
|
|
157
|
+
expect(result).to.include("global::System.Func<string, double>");
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe("Local Types", () => {
|
|
161
|
+
it("should emit local class types without qualification", () => {
|
|
162
|
+
const module = {
|
|
163
|
+
kind: "module",
|
|
164
|
+
filePath: "/src/test.ts",
|
|
165
|
+
namespace: "Test",
|
|
166
|
+
className: "test",
|
|
167
|
+
isStaticContainer: true,
|
|
168
|
+
imports: [],
|
|
169
|
+
body: [
|
|
170
|
+
// Define a local class
|
|
171
|
+
{
|
|
172
|
+
kind: "classDeclaration",
|
|
173
|
+
name: "User",
|
|
174
|
+
isExported: true,
|
|
175
|
+
isStruct: false,
|
|
176
|
+
typeParameters: [],
|
|
177
|
+
implements: [],
|
|
178
|
+
members: [],
|
|
179
|
+
},
|
|
180
|
+
// Use the local class as a type
|
|
181
|
+
{
|
|
182
|
+
kind: "variableDeclaration",
|
|
183
|
+
declarationKind: "const",
|
|
184
|
+
isExported: false,
|
|
185
|
+
declarations: [
|
|
186
|
+
{
|
|
187
|
+
kind: "variableDeclarator",
|
|
188
|
+
name: { kind: "identifierPattern", name: "user" },
|
|
189
|
+
type: { kind: "referenceType", name: "User" },
|
|
190
|
+
initializer: { kind: "literal", value: null },
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
exports: [],
|
|
196
|
+
};
|
|
197
|
+
const result = emitModule(module);
|
|
198
|
+
expect(result).to.include("User user");
|
|
199
|
+
});
|
|
200
|
+
it("should emit local interface types without qualification", () => {
|
|
201
|
+
const module = {
|
|
202
|
+
kind: "module",
|
|
203
|
+
filePath: "/src/test.ts",
|
|
204
|
+
namespace: "Test",
|
|
205
|
+
className: "test",
|
|
206
|
+
isStaticContainer: true,
|
|
207
|
+
imports: [],
|
|
208
|
+
body: [
|
|
209
|
+
// Define a local interface
|
|
210
|
+
{
|
|
211
|
+
kind: "interfaceDeclaration",
|
|
212
|
+
name: "IUser",
|
|
213
|
+
isExported: true,
|
|
214
|
+
isStruct: false,
|
|
215
|
+
typeParameters: [],
|
|
216
|
+
extends: [],
|
|
217
|
+
members: [],
|
|
218
|
+
},
|
|
219
|
+
// Use the local interface as a type
|
|
220
|
+
{
|
|
221
|
+
kind: "variableDeclaration",
|
|
222
|
+
declarationKind: "const",
|
|
223
|
+
isExported: false,
|
|
224
|
+
declarations: [
|
|
225
|
+
{
|
|
226
|
+
kind: "variableDeclarator",
|
|
227
|
+
name: { kind: "identifierPattern", name: "user" },
|
|
228
|
+
type: { kind: "referenceType", name: "IUser" },
|
|
229
|
+
initializer: { kind: "literal", value: null },
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
],
|
|
234
|
+
exports: [],
|
|
235
|
+
};
|
|
236
|
+
const result = emitModule(module);
|
|
237
|
+
expect(result).to.include("IUser user");
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
describe("Runtime Mode Guards", () => {
|
|
241
|
+
it("should NOT emit JSRuntime in dotnet mode for array indexing", () => {
|
|
242
|
+
// This test creates a module with array index access
|
|
243
|
+
// In dotnet mode, it should use native indexer, not JSRuntime.Array.get()
|
|
244
|
+
const module = {
|
|
245
|
+
kind: "module",
|
|
246
|
+
filePath: "/src/test.ts",
|
|
247
|
+
namespace: "Test",
|
|
248
|
+
className: "test",
|
|
249
|
+
isStaticContainer: true,
|
|
250
|
+
imports: [],
|
|
251
|
+
body: [
|
|
252
|
+
{
|
|
253
|
+
kind: "functionDeclaration",
|
|
254
|
+
name: "getFirst",
|
|
255
|
+
isExported: true,
|
|
256
|
+
isAsync: false,
|
|
257
|
+
isGenerator: false,
|
|
258
|
+
parameters: [
|
|
259
|
+
{
|
|
260
|
+
kind: "parameter",
|
|
261
|
+
pattern: { kind: "identifierPattern", name: "arr" },
|
|
262
|
+
type: {
|
|
263
|
+
kind: "arrayType",
|
|
264
|
+
elementType: { kind: "primitiveType", name: "number" },
|
|
265
|
+
},
|
|
266
|
+
isOptional: false,
|
|
267
|
+
isRest: false,
|
|
268
|
+
passing: "value",
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
returnType: { kind: "primitiveType", name: "number" },
|
|
272
|
+
body: {
|
|
273
|
+
kind: "blockStatement",
|
|
274
|
+
statements: [
|
|
275
|
+
{
|
|
276
|
+
kind: "returnStatement",
|
|
277
|
+
expression: {
|
|
278
|
+
kind: "memberAccess",
|
|
279
|
+
object: {
|
|
280
|
+
kind: "identifier",
|
|
281
|
+
name: "arr",
|
|
282
|
+
inferredType: {
|
|
283
|
+
kind: "arrayType",
|
|
284
|
+
elementType: { kind: "primitiveType", name: "number" },
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
property: {
|
|
288
|
+
kind: "literal",
|
|
289
|
+
value: 0,
|
|
290
|
+
// Proof marker: int literal
|
|
291
|
+
inferredType: {
|
|
292
|
+
kind: "primitiveType",
|
|
293
|
+
name: "int",
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
isComputed: true,
|
|
297
|
+
isOptional: false,
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
],
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
exports: [],
|
|
305
|
+
};
|
|
306
|
+
const result = emitModule(module, { runtime: "dotnet" });
|
|
307
|
+
// In dotnet mode, output should NOT contain JSRuntime
|
|
308
|
+
expect(result).to.not.include("Tsonic.JSRuntime");
|
|
309
|
+
// Should use native indexer (no cast needed with proof marker)
|
|
310
|
+
expect(result).to.include("arr[0]");
|
|
311
|
+
});
|
|
312
|
+
it("should emit JSRuntime in js mode for array indexing", () => {
|
|
313
|
+
// Same module as above but in js mode
|
|
314
|
+
const module = {
|
|
315
|
+
kind: "module",
|
|
316
|
+
filePath: "/src/test.ts",
|
|
317
|
+
namespace: "Test",
|
|
318
|
+
className: "test",
|
|
319
|
+
isStaticContainer: true,
|
|
320
|
+
imports: [],
|
|
321
|
+
body: [
|
|
322
|
+
{
|
|
323
|
+
kind: "functionDeclaration",
|
|
324
|
+
name: "getFirst",
|
|
325
|
+
isExported: true,
|
|
326
|
+
isAsync: false,
|
|
327
|
+
isGenerator: false,
|
|
328
|
+
parameters: [
|
|
329
|
+
{
|
|
330
|
+
kind: "parameter",
|
|
331
|
+
pattern: { kind: "identifierPattern", name: "arr" },
|
|
332
|
+
type: {
|
|
333
|
+
kind: "arrayType",
|
|
334
|
+
elementType: { kind: "primitiveType", name: "number" },
|
|
335
|
+
},
|
|
336
|
+
isOptional: false,
|
|
337
|
+
isRest: false,
|
|
338
|
+
passing: "value",
|
|
339
|
+
},
|
|
340
|
+
],
|
|
341
|
+
returnType: { kind: "primitiveType", name: "number" },
|
|
342
|
+
body: {
|
|
343
|
+
kind: "blockStatement",
|
|
344
|
+
statements: [
|
|
345
|
+
{
|
|
346
|
+
kind: "returnStatement",
|
|
347
|
+
expression: {
|
|
348
|
+
kind: "memberAccess",
|
|
349
|
+
object: {
|
|
350
|
+
kind: "identifier",
|
|
351
|
+
name: "arr",
|
|
352
|
+
inferredType: {
|
|
353
|
+
kind: "arrayType",
|
|
354
|
+
elementType: { kind: "primitiveType", name: "number" },
|
|
355
|
+
},
|
|
356
|
+
},
|
|
357
|
+
property: {
|
|
358
|
+
kind: "literal",
|
|
359
|
+
value: 0,
|
|
360
|
+
// Proof marker: int literal
|
|
361
|
+
inferredType: {
|
|
362
|
+
kind: "primitiveType",
|
|
363
|
+
name: "int",
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
isComputed: true,
|
|
367
|
+
isOptional: false,
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
],
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
],
|
|
374
|
+
exports: [],
|
|
375
|
+
};
|
|
376
|
+
const result = emitModule(module, { runtime: "js" });
|
|
377
|
+
// In js mode, output should use JSRuntime.Array.get()
|
|
378
|
+
expect(result).to.include("global::Tsonic.JSRuntime.Array.get");
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
//# sourceMappingURL=references.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"references.test.js","sourceRoot":"","sources":["../../src/types/references.test.ts"],"names":[],"mappings":"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"}
|