@tsonic/emitter 0.0.3 → 0.0.5
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/adapter-generator.d.ts.map +1 -1
- package/dist/adapter-generator.js +3 -2
- package/dist/adapter-generator.js.map +1 -1
- package/dist/array.test.js +1 -1
- package/dist/array.test.js.map +1 -1
- package/dist/core/imports.d.ts.map +1 -1
- package/dist/core/imports.js +13 -9
- package/dist/core/imports.js.map +1 -1
- package/dist/core/local-types.d.ts +19 -0
- package/dist/core/local-types.d.ts.map +1 -0
- package/dist/core/local-types.js +77 -0
- package/dist/core/local-types.js.map +1 -0
- package/dist/core/module-emitter/orchestrator.d.ts.map +1 -1
- package/dist/core/module-emitter/orchestrator.js +11 -4
- package/dist/core/module-emitter/orchestrator.js.map +1 -1
- package/dist/core/module-emitter/static-container.d.ts +2 -1
- package/dist/core/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/module-emitter/static-container.js +9 -2
- package/dist/core/module-emitter/static-container.js.map +1 -1
- package/dist/core/module-map.d.ts.map +1 -1
- package/dist/core/module-map.js +6 -0
- package/dist/core/module-map.js.map +1 -1
- package/dist/core/type-resolution.d.ts +47 -0
- package/dist/core/type-resolution.d.ts.map +1 -0
- package/dist/core/type-resolution.js +283 -0
- package/dist/core/type-resolution.js.map +1 -0
- package/dist/core/type-resolution.test.d.ts +5 -0
- package/dist/core/type-resolution.test.d.ts.map +1 -0
- package/dist/core/type-resolution.test.js +271 -0
- package/dist/core/type-resolution.test.js.map +1 -0
- package/dist/emitter-types/context.d.ts +29 -0
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +39 -0
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +31 -0
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter-types/identifiers.d.ts +23 -0
- package/dist/emitter-types/identifiers.d.ts.map +1 -0
- package/dist/emitter-types/identifiers.js +164 -0
- package/dist/emitter-types/identifiers.js.map +1 -0
- package/dist/emitter-types/index.d.ts +3 -2
- package/dist/emitter-types/index.d.ts.map +1 -1
- package/dist/emitter-types/index.js +2 -1
- package/dist/emitter-types/index.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +5 -5
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +14 -7
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/collections.d.ts +5 -1
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +19 -8
- package/dist/expressions/collections.js.map +1 -1
- package/dist/expressions/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +3 -2
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/literals.d.ts +2 -1
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +10 -1
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/literals.test.d.ts +5 -0
- package/dist/expressions/literals.test.d.ts.map +1 -0
- package/dist/expressions/literals.test.js +155 -0
- package/dist/expressions/literals.test.js.map +1 -0
- package/dist/expressions/operators.d.ts +5 -1
- package/dist/expressions/operators.d.ts.map +1 -1
- package/dist/expressions/operators.js +8 -3
- package/dist/expressions/operators.js.map +1 -1
- package/dist/statements/blocks.d.ts +1 -0
- package/dist/statements/blocks.d.ts.map +1 -1
- package/dist/statements/blocks.js +3 -1
- package/dist/statements/blocks.js.map +1 -1
- package/dist/statements/classes/inline-types.d.ts.map +1 -1
- package/dist/statements/classes/inline-types.js +3 -1
- package/dist/statements/classes/inline-types.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +22 -8
- 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 +3 -2
- package/dist/statements/classes/members/properties.js.map +1 -1
- package/dist/statements/classes/parameters.d.ts.map +1 -1
- package/dist/statements/classes/parameters.js +4 -3
- package/dist/statements/classes/parameters.js.map +1 -1
- package/dist/statements/classes/properties.d.ts.map +1 -1
- package/dist/statements/classes/properties.js +5 -4
- package/dist/statements/classes/properties.js.map +1 -1
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +5 -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 +14 -7
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/enums.d.ts.map +1 -1
- package/dist/statements/declarations/enums.js +8 -4
- package/dist/statements/declarations/enums.js.map +1 -1
- package/dist/statements/declarations/functions.d.ts.map +1 -1
- package/dist/statements/declarations/functions.js +20 -6
- 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 +2 -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 +3 -2
- 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 +7 -5
- package/dist/statements/declarations/variables.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.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -65,4 +65,43 @@ export const withClassName = (context, className) => ({
|
|
|
65
65
|
...context,
|
|
66
66
|
className,
|
|
67
67
|
});
|
|
68
|
+
/**
|
|
69
|
+
* Execute an emission function with scoped context fields.
|
|
70
|
+
*
|
|
71
|
+
* This helper ensures that scoped fields (typeParameters, returnType) are
|
|
72
|
+
* restored after emission, preventing scope leaks when context is threaded
|
|
73
|
+
* upward via [result, newContext] tuples.
|
|
74
|
+
*
|
|
75
|
+
* Other context mutations (intLoopVars, importBindings, etc.) are preserved
|
|
76
|
+
* and bubbled up correctly.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const [result, finalCtx] = withScoped(
|
|
81
|
+
* context,
|
|
82
|
+
* {
|
|
83
|
+
* typeParameters: new Set([...context.typeParameters ?? [], "T"]),
|
|
84
|
+
* returnType: stmt.returnType
|
|
85
|
+
* },
|
|
86
|
+
* (scopedCtx) => emitFunctionBody(stmt.body, scopedCtx)
|
|
87
|
+
* );
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export const withScoped = (context, scopedPatch, emit) => {
|
|
91
|
+
// Save current scoped field values
|
|
92
|
+
const saved = {
|
|
93
|
+
typeParameters: context.typeParameters,
|
|
94
|
+
returnType: context.returnType,
|
|
95
|
+
};
|
|
96
|
+
// Create child context with scoped patch applied
|
|
97
|
+
const childContext = { ...context, ...scopedPatch };
|
|
98
|
+
// Execute the emission
|
|
99
|
+
const [result, innerContext] = emit(childContext);
|
|
100
|
+
// Restore scoped fields while keeping other mutations from child
|
|
101
|
+
const restoredContext = {
|
|
102
|
+
...innerContext,
|
|
103
|
+
...saved,
|
|
104
|
+
};
|
|
105
|
+
return [result, restoredContext];
|
|
106
|
+
};
|
|
68
107
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/emitter-types/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAuB,EAAkB,EAAE;IACvE,sDAAsD;IACtD,IAAI,QAAQ,GAA+B,SAAS,CAAC;IACrD,IAAI,gBAAgB,GAAuC,SAAS,CAAC;IAErE,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,eAAe,CAAC,EAAE,EAAE,CAAC;YACvB,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC1C,gBAAgB,GAAG,qBAAqB,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,wDAAwD;YACxD,OAAO,CAAC,IAAI,CACV,oCAAoC,EACpC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW,EAAE,CAAC;QACd,OAAO;QACP,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,QAAQ;QACR,gBAAgB;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAuB,EAAkB,EAAE,CAAC,CAAC;IAClE,GAAG,OAAO;IACV,WAAW,EAAE,OAAO,CAAC,WAAW,GAAG,CAAC;CACrC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAuB,EAAkB,EAAE,CAAC,CAAC;IAClE,GAAG,OAAO;IACV,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;CAClD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,OAAuB,EACvB,QAAiB,EACD,EAAE,CAAC,CAAC;IACpB,GAAG,OAAO;IACV,QAAQ;CACT,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,OAAuB,EACvB,OAAgB,EACA,EAAE,CAAC,CAAC;IACpB,GAAG,OAAO;IACV,OAAO;CACR,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAuB,EACvB,SAAiB,EACD,EAAE,CAAC,CAAC;IACpB,GAAG,OAAO;IACV,SAAS;CACV,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/emitter-types/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { MetadataFile } from "@tsonic/frontend/types/metadata.js";
|
|
5
5
|
import type { TypeBinding } from "@tsonic/frontend/types/bindings.js";
|
|
6
|
+
import type { IrType, IrInterfaceMember, IrClassMember } from "@tsonic/frontend";
|
|
6
7
|
/**
|
|
7
8
|
* Module identity for import resolution
|
|
8
9
|
*/
|
|
@@ -10,6 +11,11 @@ export type ModuleIdentity = {
|
|
|
10
11
|
readonly namespace: string;
|
|
11
12
|
readonly className: string;
|
|
12
13
|
readonly filePath: string;
|
|
14
|
+
/**
|
|
15
|
+
* True if the module has a type declaration (class/interface) with the same name as className.
|
|
16
|
+
* When true, value imports should target ClassName__Module instead of ClassName.
|
|
17
|
+
*/
|
|
18
|
+
readonly hasTypeCollision: boolean;
|
|
13
19
|
};
|
|
14
20
|
/**
|
|
15
21
|
* Module map for resolving cross-file imports
|
|
@@ -79,6 +85,25 @@ export type ImportBinding = {
|
|
|
79
85
|
/** For value imports: the member name inside the container (e.g., "createUser") */
|
|
80
86
|
readonly member?: string;
|
|
81
87
|
};
|
|
88
|
+
/**
|
|
89
|
+
* Information about a locally-defined type (class/interface/typeAlias).
|
|
90
|
+
* Used for property type lookup during expression emission.
|
|
91
|
+
*/
|
|
92
|
+
export type LocalTypeInfo = {
|
|
93
|
+
readonly kind: "interface";
|
|
94
|
+
readonly typeParameters: readonly string[];
|
|
95
|
+
readonly members: readonly IrInterfaceMember[];
|
|
96
|
+
readonly extends: readonly IrType[];
|
|
97
|
+
} | {
|
|
98
|
+
readonly kind: "class";
|
|
99
|
+
readonly typeParameters: readonly string[];
|
|
100
|
+
readonly members: readonly IrClassMember[];
|
|
101
|
+
readonly implements: readonly IrType[];
|
|
102
|
+
} | {
|
|
103
|
+
readonly kind: "typeAlias";
|
|
104
|
+
readonly typeParameters: readonly string[];
|
|
105
|
+
readonly type: IrType;
|
|
106
|
+
};
|
|
82
107
|
/**
|
|
83
108
|
* Context passed through emission process
|
|
84
109
|
*/
|
|
@@ -107,6 +132,12 @@ export type EmitterContext = {
|
|
|
107
132
|
readonly importBindings?: ReadonlyMap<string, ImportBinding>;
|
|
108
133
|
/** Set of variable names known to be int (from canonical for-loop counters) */
|
|
109
134
|
readonly intLoopVars?: ReadonlySet<string>;
|
|
135
|
+
/** Type parameter names in current scope (for detecting generic type contexts) */
|
|
136
|
+
readonly typeParameters?: ReadonlySet<string>;
|
|
137
|
+
/** Return type of current function/method (for contextual typing in return statements) */
|
|
138
|
+
readonly returnType?: IrType;
|
|
139
|
+
/** Map of local type names to their definitions (for property type lookup) */
|
|
140
|
+
readonly localTypes?: ReadonlyMap<string, LocalTypeInfo>;
|
|
110
141
|
};
|
|
111
142
|
/**
|
|
112
143
|
* Result of emitting C# code
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/emitter-types/core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/emitter-types/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# identifier escaping utilities
|
|
3
|
+
*
|
|
4
|
+
* C# reserved keywords must be prefixed with @ when used as identifiers.
|
|
5
|
+
* This module provides utilities to safely emit identifiers that may
|
|
6
|
+
* conflict with C# keywords.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Escape a C# identifier if it's a reserved keyword.
|
|
10
|
+
*
|
|
11
|
+
* In C#, the @ prefix allows using keywords as identifiers:
|
|
12
|
+
* - `@class` is a valid identifier meaning "class"
|
|
13
|
+
* - `@int` is a valid identifier meaning "int"
|
|
14
|
+
*
|
|
15
|
+
* @param name The identifier name to potentially escape
|
|
16
|
+
* @returns The escaped identifier (prefixed with @ if keyword) or original name
|
|
17
|
+
*/
|
|
18
|
+
export declare const escapeCSharpIdentifier: (name: string) => string;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a name is a C# keyword
|
|
21
|
+
*/
|
|
22
|
+
export declare const isCSharpKeyword: (name: string) => boolean;
|
|
23
|
+
//# sourceMappingURL=identifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../src/emitter-types/identifiers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2JH;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,MACP,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,OACpB,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# identifier escaping utilities
|
|
3
|
+
*
|
|
4
|
+
* C# reserved keywords must be prefixed with @ when used as identifiers.
|
|
5
|
+
* This module provides utilities to safely emit identifiers that may
|
|
6
|
+
* conflict with C# keywords.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Complete list of C# keywords (as of C# 12)
|
|
10
|
+
* https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/
|
|
11
|
+
*/
|
|
12
|
+
const CSHARP_KEYWORDS = new Set([
|
|
13
|
+
// Value keywords
|
|
14
|
+
"bool",
|
|
15
|
+
"byte",
|
|
16
|
+
"char",
|
|
17
|
+
"decimal",
|
|
18
|
+
"double",
|
|
19
|
+
"float",
|
|
20
|
+
"int",
|
|
21
|
+
"long",
|
|
22
|
+
"object",
|
|
23
|
+
"sbyte",
|
|
24
|
+
"short",
|
|
25
|
+
"string",
|
|
26
|
+
"uint",
|
|
27
|
+
"ulong",
|
|
28
|
+
"ushort",
|
|
29
|
+
"void",
|
|
30
|
+
// Reference keywords
|
|
31
|
+
"class",
|
|
32
|
+
"delegate",
|
|
33
|
+
"enum",
|
|
34
|
+
"interface",
|
|
35
|
+
"struct",
|
|
36
|
+
"record",
|
|
37
|
+
// Modifier keywords
|
|
38
|
+
"abstract",
|
|
39
|
+
"async",
|
|
40
|
+
"const",
|
|
41
|
+
"event",
|
|
42
|
+
"extern",
|
|
43
|
+
"in",
|
|
44
|
+
"internal",
|
|
45
|
+
"new",
|
|
46
|
+
"out",
|
|
47
|
+
"override",
|
|
48
|
+
"partial",
|
|
49
|
+
"private",
|
|
50
|
+
"protected",
|
|
51
|
+
"public",
|
|
52
|
+
"readonly",
|
|
53
|
+
"ref",
|
|
54
|
+
"sealed",
|
|
55
|
+
"static",
|
|
56
|
+
"unsafe",
|
|
57
|
+
"virtual",
|
|
58
|
+
"volatile",
|
|
59
|
+
// Statement keywords
|
|
60
|
+
"break",
|
|
61
|
+
"case",
|
|
62
|
+
"catch",
|
|
63
|
+
"checked",
|
|
64
|
+
"continue",
|
|
65
|
+
"default",
|
|
66
|
+
"do",
|
|
67
|
+
"else",
|
|
68
|
+
"finally",
|
|
69
|
+
"fixed",
|
|
70
|
+
"for",
|
|
71
|
+
"foreach",
|
|
72
|
+
"goto",
|
|
73
|
+
"if",
|
|
74
|
+
"lock",
|
|
75
|
+
"return",
|
|
76
|
+
"switch",
|
|
77
|
+
"throw",
|
|
78
|
+
"try",
|
|
79
|
+
"unchecked",
|
|
80
|
+
"while",
|
|
81
|
+
"yield",
|
|
82
|
+
// Expression keywords
|
|
83
|
+
"as",
|
|
84
|
+
"await",
|
|
85
|
+
"base",
|
|
86
|
+
"false",
|
|
87
|
+
"is",
|
|
88
|
+
"nameof",
|
|
89
|
+
"null",
|
|
90
|
+
"sizeof",
|
|
91
|
+
"stackalloc",
|
|
92
|
+
"this",
|
|
93
|
+
"true",
|
|
94
|
+
"typeof",
|
|
95
|
+
"with",
|
|
96
|
+
// Namespace/type keywords
|
|
97
|
+
"namespace",
|
|
98
|
+
"using",
|
|
99
|
+
// Access keywords
|
|
100
|
+
"get",
|
|
101
|
+
"set",
|
|
102
|
+
"init",
|
|
103
|
+
"value",
|
|
104
|
+
// Contextual keywords (can be keywords in certain contexts)
|
|
105
|
+
"add",
|
|
106
|
+
"alias",
|
|
107
|
+
"and",
|
|
108
|
+
"ascending",
|
|
109
|
+
"args",
|
|
110
|
+
"by",
|
|
111
|
+
"descending",
|
|
112
|
+
"dynamic",
|
|
113
|
+
"equals",
|
|
114
|
+
"file",
|
|
115
|
+
"from",
|
|
116
|
+
"global",
|
|
117
|
+
"group",
|
|
118
|
+
"into",
|
|
119
|
+
"join",
|
|
120
|
+
"let",
|
|
121
|
+
"managed",
|
|
122
|
+
"nint",
|
|
123
|
+
"not",
|
|
124
|
+
"notnull",
|
|
125
|
+
"nuint",
|
|
126
|
+
"on",
|
|
127
|
+
"or",
|
|
128
|
+
"orderby",
|
|
129
|
+
"remove",
|
|
130
|
+
"required",
|
|
131
|
+
"scoped",
|
|
132
|
+
"select",
|
|
133
|
+
"unmanaged",
|
|
134
|
+
"var",
|
|
135
|
+
"when",
|
|
136
|
+
"where",
|
|
137
|
+
// Operator keywords
|
|
138
|
+
"operator",
|
|
139
|
+
"implicit",
|
|
140
|
+
"explicit",
|
|
141
|
+
// Parameter keywords
|
|
142
|
+
"params",
|
|
143
|
+
// Exception keywords
|
|
144
|
+
"throw",
|
|
145
|
+
// Other reserved
|
|
146
|
+
"implicit",
|
|
147
|
+
"explicit",
|
|
148
|
+
]);
|
|
149
|
+
/**
|
|
150
|
+
* Escape a C# identifier if it's a reserved keyword.
|
|
151
|
+
*
|
|
152
|
+
* In C#, the @ prefix allows using keywords as identifiers:
|
|
153
|
+
* - `@class` is a valid identifier meaning "class"
|
|
154
|
+
* - `@int` is a valid identifier meaning "int"
|
|
155
|
+
*
|
|
156
|
+
* @param name The identifier name to potentially escape
|
|
157
|
+
* @returns The escaped identifier (prefixed with @ if keyword) or original name
|
|
158
|
+
*/
|
|
159
|
+
export const escapeCSharpIdentifier = (name) => CSHARP_KEYWORDS.has(name) ? `@${name}` : name;
|
|
160
|
+
/**
|
|
161
|
+
* Check if a name is a C# keyword
|
|
162
|
+
*/
|
|
163
|
+
export const isCSharpKeyword = (name) => CSHARP_KEYWORDS.has(name);
|
|
164
|
+
//# sourceMappingURL=identifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifiers.js","sourceRoot":"","sources":["../../src/emitter-types/identifiers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,iBAAiB;IACjB,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,OAAO;IACP,KAAK;IACL,MAAM;IACN,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IAEN,qBAAqB;IACrB,OAAO;IACP,UAAU;IACV,MAAM;IACN,WAAW;IACX,QAAQ;IACR,QAAQ;IAER,oBAAoB;IACpB,UAAU;IACV,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,UAAU;IACV,KAAK;IACL,KAAK;IACL,UAAU;IACV,SAAS;IACT,SAAS;IACT,WAAW;IACX,QAAQ;IACR,UAAU;IACV,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,UAAU;IAEV,qBAAqB;IACrB,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,UAAU;IACV,SAAS;IACT,IAAI;IACJ,MAAM;IACN,SAAS;IACT,OAAO;IACP,KAAK;IACL,SAAS;IACT,MAAM;IACN,IAAI;IACJ,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,KAAK;IACL,WAAW;IACX,OAAO;IACP,OAAO;IAEP,sBAAsB;IACtB,IAAI;IACJ,OAAO;IACP,MAAM;IACN,OAAO;IACP,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IAEN,0BAA0B;IAC1B,WAAW;IACX,OAAO;IAEP,kBAAkB;IAClB,KAAK;IACL,KAAK;IACL,MAAM;IACN,OAAO;IAEP,4DAA4D;IAC5D,KAAK;IACL,OAAO;IACP,KAAK;IACL,WAAW;IACX,MAAM;IACN,IAAI;IACJ,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,SAAS;IACT,MAAM;IACN,KAAK;IACL,SAAS;IACT,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,KAAK;IACL,MAAM;IACN,OAAO;IAEP,oBAAoB;IACpB,UAAU;IACV,UAAU;IACV,UAAU;IAEV,qBAAqB;IACrB,QAAQ;IAER,qBAAqB;IACrB,OAAO;IAEP,iBAAiB;IACjB,UAAU;IACV,UAAU;CACX,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7D,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CACvD,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Emitter types - Public API
|
|
3
3
|
*/
|
|
4
|
-
export type { EmitterOptions, EmitterContext, EmitResult, CSharpFragment, ImportBinding, ModuleIdentity, ModuleMap, ExportSource, ExportMap, JsonAotRegistry, } from "./core.js";
|
|
4
|
+
export type { EmitterOptions, EmitterContext, EmitResult, CSharpFragment, ImportBinding, ModuleIdentity, ModuleMap, ExportSource, ExportMap, JsonAotRegistry, LocalTypeInfo, } from "./core.js";
|
|
5
5
|
export type { CSharpAccessModifier, CSharpClassModifier, CSharpMethodModifier, CSharpUsing, } from "./csharp-types.js";
|
|
6
|
-
export { createContext, indent, dedent, withStatic, withAsync, withClassName, } from "./context.js";
|
|
6
|
+
export { createContext, indent, dedent, withStatic, withAsync, withClassName, withScoped, } from "./context.js";
|
|
7
7
|
export { getIndent } from "./formatting.js";
|
|
8
8
|
export { renderTypeFQN, renderMemberFQN, renderFQN, FQN } from "./fqn.js";
|
|
9
|
+
export { escapeCSharpIdentifier, isCSharpKeyword } from "./identifiers.js";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/emitter-types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACZ,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/emitter-types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,cAAc,EACd,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACZ,SAAS,EACT,eAAe,EACf,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Emitter types - Public API
|
|
3
3
|
*/
|
|
4
|
-
export { createContext, indent, dedent, withStatic, withAsync, withClassName, } from "./context.js";
|
|
4
|
+
export { createContext, indent, dedent, withStatic, withAsync, withClassName, withScoped, } from "./context.js";
|
|
5
5
|
export { getIndent } from "./formatting.js";
|
|
6
6
|
export { renderTypeFQN, renderMemberFQN, renderFQN, FQN } from "./fqn.js";
|
|
7
|
+
export { escapeCSharpIdentifier, isCSharpKeyword } from "./identifiers.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter-types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter-types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,OAAO,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-emitter.d.ts","sourceRoot":"","sources":["../src/expression-emitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6B5D;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,YAAY,EAClB,SAAS,cAAc,EACvB,eAAe,MAAM,KACpB,CAAC,cAAc,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"expression-emitter.d.ts","sourceRoot":"","sources":["../src/expression-emitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6B5D;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,YAAY,EAClB,SAAS,cAAc,EACvB,eAAe,MAAM,KACpB,CAAC,cAAc,EAAE,cAAc,CAsEjC,CAAC;AAGF,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC"}
|
|
@@ -20,15 +20,15 @@ import { emitTemplateLiteral, emitSpread, emitAwait, } from "./expressions/other
|
|
|
20
20
|
export const emitExpression = (expr, context, expectedType) => {
|
|
21
21
|
switch (expr.kind) {
|
|
22
22
|
case "literal":
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
return emitLiteral(expr, context, getExpectedClrTypeForNumeric(expr.inferredType));
|
|
23
|
+
// Pass expectedType for null → default conversion in generic contexts
|
|
24
|
+
// Also check if the literal has an inferredType that requires integer emission
|
|
25
|
+
return emitLiteral(expr, context, expectedType, getExpectedClrTypeForNumeric(expr.inferredType));
|
|
26
26
|
case "identifier":
|
|
27
27
|
return emitIdentifier(expr, context);
|
|
28
28
|
case "array":
|
|
29
29
|
return emitArray(expr, context, expectedType);
|
|
30
30
|
case "object":
|
|
31
|
-
return emitObject(expr, context);
|
|
31
|
+
return emitObject(expr, context, expectedType);
|
|
32
32
|
case "memberAccess":
|
|
33
33
|
return emitMemberAccess(expr, context);
|
|
34
34
|
case "call":
|
|
@@ -46,7 +46,7 @@ export const emitExpression = (expr, context, expectedType) => {
|
|
|
46
46
|
case "assignment":
|
|
47
47
|
return emitAssignment(expr, context);
|
|
48
48
|
case "conditional":
|
|
49
|
-
return emitConditional(expr, context);
|
|
49
|
+
return emitConditional(expr, context, expectedType);
|
|
50
50
|
case "functionExpression":
|
|
51
51
|
return emitFunctionExpression(expr, context);
|
|
52
52
|
case "arrowFunction":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-emitter.js","sourceRoot":"","sources":["../src/expression-emitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,sDAAsD;AACtD,OAAO,EACL,WAAW,EACX,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAkB,EAClB,OAAuB,EACvB,YAAqB,EACa,EAAE;IACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,
|
|
1
|
+
{"version":3,"file":"expression-emitter.js","sourceRoot":"","sources":["../src/expression-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA4C7D;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,EACrD,SAAS,cAAc,KACtB,CAAC,cAAc,EAAE,cAAc,CAwGjC,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { emitExpression } from "../expression-emitter.js";
|
|
5
5
|
import { isExplicitViewProperty, extractInterfaceNameFromView, } from "@tsonic/frontend/types/explicit-views.js";
|
|
6
|
+
import { escapeCSharpIdentifier } from "../emitter-types/index.js";
|
|
6
7
|
/**
|
|
7
8
|
* Check if an expression represents a static type reference (not an instance)
|
|
8
9
|
* Static type references are: namespace.Type or direct Type identifiers that resolve to types
|
|
@@ -60,15 +61,13 @@ export const emitMemberAccess = (expr, context) => {
|
|
|
60
61
|
// Check if this is array index access - rewrite to static helper
|
|
61
62
|
const objectType = expr.object.inferredType;
|
|
62
63
|
const isArrayType = objectType?.kind === "arrayType";
|
|
63
|
-
// For TS arrays, use Tsonic.
|
|
64
|
+
// For TS arrays, use Tsonic.JSRuntime.Array.get() in BOTH modes
|
|
64
65
|
// This provides TS array semantics (auto-grow, sparse arrays, etc.)
|
|
65
|
-
// Note: Tsonic.Runtime is compiler support for lowered TS constructs (both modes)
|
|
66
|
-
// Tsonic.JSRuntime is JS built-ins like .map/.filter (js mode only)
|
|
67
66
|
if (isArrayType) {
|
|
68
67
|
const indexContext = { ...newContext, isArrayIndex: true };
|
|
69
68
|
const [propFrag, contextWithIndex] = emitExpression(expr.property, indexContext);
|
|
70
69
|
const finalContext = { ...contextWithIndex, isArrayIndex: false };
|
|
71
|
-
const text = `global::Tsonic.
|
|
70
|
+
const text = `global::Tsonic.JSRuntime.Array.get(${objectFrag.text}, ${propFrag.text})`;
|
|
72
71
|
return [{ text }, finalContext];
|
|
73
72
|
}
|
|
74
73
|
// CLR indexer access (non-TS-array types like List<T>, string, etc.)
|
|
@@ -91,10 +90,18 @@ export const emitMemberAccess = (expr, context) => {
|
|
|
91
90
|
const prop = expr.property;
|
|
92
91
|
const objectType = expr.object.inferredType;
|
|
93
92
|
const isArrayType = objectType?.kind === "arrayType";
|
|
94
|
-
// In JS runtime mode, rewrite array.length → global::Tsonic.
|
|
93
|
+
// In JS runtime mode, rewrite array.length → global::Tsonic.JSRuntime.Array.length(array)
|
|
95
94
|
// In dotnet mode, there is no JS emulation - users access .Count directly on List<T>
|
|
96
95
|
if (isArrayType && prop === "length" && runtime === "js") {
|
|
97
|
-
const text = `global::Tsonic.
|
|
96
|
+
const text = `global::Tsonic.JSRuntime.Array.length(${objectFrag.text})`;
|
|
97
|
+
return [{ text }, newContext];
|
|
98
|
+
}
|
|
99
|
+
// Check if this is a string type
|
|
100
|
+
const isStringType = objectType?.kind === "primitiveType" && objectType.name === "string";
|
|
101
|
+
// In JS runtime mode, rewrite string.length → global::Tsonic.JSRuntime.String.length(string)
|
|
102
|
+
// In dotnet mode, use C#'s native .Length property
|
|
103
|
+
if (isStringType && prop === "length" && runtime === "js") {
|
|
104
|
+
const text = `global::Tsonic.JSRuntime.String.length(${objectFrag.text})`;
|
|
98
105
|
return [{ text }, newContext];
|
|
99
106
|
}
|
|
100
107
|
// Handle explicit interface view properties (As_IInterface)
|
|
@@ -110,7 +117,7 @@ export const emitMemberAccess = (expr, context) => {
|
|
|
110
117
|
}
|
|
111
118
|
// Regular property access
|
|
112
119
|
const accessor = expr.isOptional ? "?." : ".";
|
|
113
|
-
const text = `${objectFrag.text}${accessor}${prop}`;
|
|
120
|
+
const text = `${objectFrag.text}${accessor}${escapeCSharpIdentifier(prop)}`;
|
|
114
121
|
return [{ text }, newContext];
|
|
115
122
|
};
|
|
116
123
|
//# sourceMappingURL=access.js.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/expressions/access.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,12 @@ export declare const emitArray: (expr: Extract<IrExpression, {
|
|
|
17
17
|
* 2. Nominal type (interface, class) → new TypeName { prop = value, ... }
|
|
18
18
|
*
|
|
19
19
|
* Anonymous object types should be caught by validation (TSN7403) before reaching here.
|
|
20
|
+
*
|
|
21
|
+
* @param expr - The object expression
|
|
22
|
+
* @param context - Emitter context
|
|
23
|
+
* @param expectedType - Optional expected type (for property type resolution in generic contexts)
|
|
20
24
|
*/
|
|
21
25
|
export declare const emitObject: (expr: Extract<IrExpression, {
|
|
22
26
|
kind: "object";
|
|
23
|
-
}>, context: EmitterContext) => [CSharpFragment, EmitterContext];
|
|
27
|
+
}>, context: EmitterContext, expectedType?: IrType) => [CSharpFragment, EmitterContext];
|
|
24
28
|
//# sourceMappingURL=collections.d.ts.map
|
|
@@ -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;AAiB7D;;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,CAmJjC,CAAC;AAEF;;;;;;;;;;;;GAYG;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,CAmDjC,CAAC"}
|
|
@@ -3,6 +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
7
|
/**
|
|
7
8
|
* Escape a string for use in a C# string literal.
|
|
8
9
|
* Handles backslashes, quotes, newlines, carriage returns, and tabs.
|
|
@@ -134,12 +135,18 @@ export const emitArray = (expr, context, expectedType) => {
|
|
|
134
135
|
* 2. Nominal type (interface, class) → new TypeName { prop = value, ... }
|
|
135
136
|
*
|
|
136
137
|
* Anonymous object types should be caught by validation (TSN7403) before reaching here.
|
|
138
|
+
*
|
|
139
|
+
* @param expr - The object expression
|
|
140
|
+
* @param context - Emitter context
|
|
141
|
+
* @param expectedType - Optional expected type (for property type resolution in generic contexts)
|
|
137
142
|
*/
|
|
138
|
-
export const emitObject = (expr, context) => {
|
|
143
|
+
export const emitObject = (expr, context, expectedType) => {
|
|
139
144
|
let currentContext = context;
|
|
145
|
+
// Use expectedType if provided, fall back to contextualType
|
|
146
|
+
const effectiveType = expectedType ?? expr.contextualType;
|
|
140
147
|
// Check if contextual type is a dictionary type
|
|
141
|
-
if (
|
|
142
|
-
return emitDictionaryLiteral(expr, currentContext);
|
|
148
|
+
if (effectiveType?.kind === "dictionaryType") {
|
|
149
|
+
return emitDictionaryLiteral(expr, currentContext, effectiveType);
|
|
143
150
|
}
|
|
144
151
|
// Regular object literal with nominal type
|
|
145
152
|
const properties = [];
|
|
@@ -150,14 +157,18 @@ export const emitObject = (expr, context) => {
|
|
|
150
157
|
}
|
|
151
158
|
else {
|
|
152
159
|
const key = typeof prop.key === "string" ? prop.key : "/* computed */";
|
|
153
|
-
|
|
160
|
+
// Resolve property type from contextual type for generic null→default handling
|
|
161
|
+
const propertyExpectedType = typeof prop.key === "string"
|
|
162
|
+
? getPropertyType(effectiveType, prop.key, currentContext)
|
|
163
|
+
: undefined;
|
|
164
|
+
const [valueFrag, newContext] = emitExpression(prop.value, currentContext, propertyExpectedType);
|
|
154
165
|
properties.push(`${key} = ${valueFrag.text}`);
|
|
155
166
|
currentContext = newContext;
|
|
156
167
|
}
|
|
157
168
|
}
|
|
158
169
|
// Check for contextual type (from return type, variable annotation, etc.)
|
|
159
170
|
// If present, emit `new TypeName { ... }` instead of anonymous `new { ... }`
|
|
160
|
-
const [typeName, finalContext] = resolveContextualType(
|
|
171
|
+
const [typeName, finalContext] = resolveContextualType(effectiveType, currentContext);
|
|
161
172
|
if (!typeName) {
|
|
162
173
|
// ICE: Validation (TSN7403) should have caught anonymous object literals
|
|
163
174
|
throw new Error("ICE: Object literal without contextual type reached emitter - validation missed TSN7403");
|
|
@@ -171,9 +182,8 @@ export const emitObject = (expr, context) => {
|
|
|
171
182
|
* Input: const d: Record<string, number> = { a: 1, b: 2 };
|
|
172
183
|
* Output: new Dictionary<string, double> { ["a"] = 1.0, ["b"] = 2.0 }
|
|
173
184
|
*/
|
|
174
|
-
const emitDictionaryLiteral = (expr, context) => {
|
|
185
|
+
const emitDictionaryLiteral = (expr, context, dictType) => {
|
|
175
186
|
let currentContext = context;
|
|
176
|
-
const dictType = expr.contextualType;
|
|
177
187
|
// Get key and value type strings
|
|
178
188
|
const [keyTypeStr, ctx1] = emitDictKeyType(dictType.keyType, currentContext);
|
|
179
189
|
const [valueTypeStr, ctx2] = emitType(dictType.valueType, ctx1);
|
|
@@ -190,7 +200,8 @@ const emitDictionaryLiteral = (expr, context) => {
|
|
|
190
200
|
if (typeof prop.key !== "string") {
|
|
191
201
|
throw new Error("ICE: Computed property key in dictionary literal - validation gap");
|
|
192
202
|
}
|
|
193
|
-
|
|
203
|
+
// Pass dictionary value type as expectedType for generic null→default handling
|
|
204
|
+
const [valueFrag, newContext] = emitExpression(prop.value, currentContext, dictType.valueType);
|
|
194
205
|
entries.push(`["${escapeCSharpString(prop.key)}"] = ${valueFrag.text}`);
|
|
195
206
|
currentContext = newContext;
|
|
196
207
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/expressions/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/expressions/collections.ts"],"names":[],"mappings":"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"}
|