@tsonic/emitter 0.0.39 → 0.0.41
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/core/boolean-context.d.ts.map +1 -1
- package/dist/core/boolean-context.js +235 -25
- package/dist/core/boolean-context.js.map +1 -1
- package/dist/core/local-names.d.ts +26 -0
- package/dist/core/local-names.d.ts.map +1 -0
- package/dist/core/local-names.js +47 -0
- package/dist/core/local-names.js.map +1 -0
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +1 -0
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +14 -0
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/expressions/functions.d.ts.map +1 -1
- package/dist/expressions/functions.js +24 -6
- package/dist/expressions/functions.js.map +1 -1
- package/dist/expressions/operators.js +3 -3
- package/dist/expressions/operators.js.map +1 -1
- package/dist/golden-shard-0.test.d.ts +2 -0
- package/dist/golden-shard-0.test.d.ts.map +1 -0
- package/dist/golden-shard-0.test.js +3 -0
- package/dist/golden-shard-0.test.js.map +1 -0
- package/dist/golden-shard-1.test.d.ts +2 -0
- package/dist/golden-shard-1.test.d.ts.map +1 -0
- package/dist/golden-shard-1.test.js +3 -0
- package/dist/golden-shard-1.test.js.map +1 -0
- package/dist/golden-shard-2.test.d.ts +2 -0
- package/dist/golden-shard-2.test.d.ts.map +1 -0
- package/dist/golden-shard-2.test.js +3 -0
- package/dist/golden-shard-2.test.js.map +1 -0
- package/dist/golden-shard-3.test.d.ts +2 -0
- package/dist/golden-shard-3.test.d.ts.map +1 -0
- package/dist/golden-shard-3.test.js +3 -0
- package/dist/golden-shard-3.test.js.map +1 -0
- package/dist/golden-shard-4.test.d.ts +2 -0
- package/dist/golden-shard-4.test.d.ts.map +1 -0
- package/dist/golden-shard-4.test.js +3 -0
- package/dist/golden-shard-4.test.js.map +1 -0
- package/dist/golden-shard-5.test.d.ts +2 -0
- package/dist/golden-shard-5.test.d.ts.map +1 -0
- package/dist/golden-shard-5.test.js +3 -0
- package/dist/golden-shard-5.test.js.map +1 -0
- package/dist/golden-shard-6.test.d.ts +2 -0
- package/dist/golden-shard-6.test.d.ts.map +1 -0
- package/dist/golden-shard-6.test.js +3 -0
- package/dist/golden-shard-6.test.js.map +1 -0
- package/dist/golden-shard-7.test.d.ts +2 -0
- package/dist/golden-shard-7.test.d.ts.map +1 -0
- package/dist/golden-shard-7.test.js +3 -0
- package/dist/golden-shard-7.test.js.map +1 -0
- package/dist/golden-shards.d.ts +7 -0
- package/dist/golden-shards.d.ts.map +1 -0
- package/dist/golden-shards.js +35 -0
- package/dist/golden-shards.js.map +1 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +33 -13
- package/dist/patterns.js.map +1 -1
- package/dist/statements/blocks.d.ts.map +1 -1
- package/dist/statements/blocks.js +21 -11
- package/dist/statements/blocks.js.map +1 -1
- package/dist/statements/classes/members/constructors.d.ts.map +1 -1
- package/dist/statements/classes/members/constructors.js +16 -6
- package/dist/statements/classes/members/constructors.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +15 -7
- 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 +30 -17
- package/dist/statements/classes/members/properties.js.map +1 -1
- package/dist/statements/control/conditionals.d.ts.map +1 -1
- package/dist/statements/control/conditionals.js +72 -35
- package/dist/statements/control/conditionals.js.map +1 -1
- package/dist/statements/control/exceptions.d.ts.map +1 -1
- package/dist/statements/control/exceptions.js +11 -4
- package/dist/statements/control/exceptions.js.map +1 -1
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +47 -16
- 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 +19 -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 +52 -17
- package/dist/statements/declarations/functions.js.map +1 -1
- package/dist/statements/declarations/variables.d.ts.map +1 -1
- package/dist/statements/declarations/variables.js +13 -24
- package/dist/statements/declarations/variables.js.map +1 -1
- package/package.json +3 -3
- package/dist/golden.test.d.ts +0 -11
- package/dist/golden.test.d.ts.map +0 -1
- package/dist/golden.test.js +0 -41
- package/dist/golden.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/statements/blocks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/statements/blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/constructors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAiC,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAA6B,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/constructors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAiC,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAA6B,MAAM,mBAAmB,CAAC;AA0B9E;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,aAAa,GAAG;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAAE,EAC1D,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CA8GzB,CAAC"}
|
|
@@ -9,12 +9,15 @@ import { emitAttributes } from "../../../core/attributes.js";
|
|
|
9
9
|
import { emitParametersWithDestructuring, generateParameterDestructuring, } from "../parameters.js";
|
|
10
10
|
const seedLocalNameMapFromParameters = (params, context) => {
|
|
11
11
|
const map = new Map(context.localNameMap ?? []);
|
|
12
|
+
const used = new Set();
|
|
12
13
|
for (const p of params) {
|
|
13
14
|
if (p.pattern.kind === "identifierPattern") {
|
|
14
|
-
|
|
15
|
+
const emitted = escapeCSharpIdentifier(p.pattern.name);
|
|
16
|
+
map.set(p.pattern.name, emitted);
|
|
17
|
+
used.add(emitted);
|
|
15
18
|
}
|
|
16
19
|
}
|
|
17
|
-
return { ...context, localNameMap: map };
|
|
20
|
+
return { ...context, localNameMap: map, usedLocalNames: used };
|
|
18
21
|
};
|
|
19
22
|
/**
|
|
20
23
|
* Emit a constructor declaration
|
|
@@ -26,6 +29,7 @@ export const emitConstructorMember = (member, context) => {
|
|
|
26
29
|
typeParameterNameMap: context.typeParameterNameMap,
|
|
27
30
|
returnType: context.returnType,
|
|
28
31
|
localNameMap: context.localNameMap,
|
|
32
|
+
usedLocalNames: context.usedLocalNames,
|
|
29
33
|
};
|
|
30
34
|
const ind = getIndent(context);
|
|
31
35
|
let currentContext = context;
|
|
@@ -65,17 +69,23 @@ export const emitConstructorMember = (member, context) => {
|
|
|
65
69
|
throw new Error("Unsupported constructor semantics: super() must be the first statement to preserve JavaScript initialization order.");
|
|
66
70
|
}
|
|
67
71
|
// Emit body without the super() call
|
|
68
|
-
|
|
72
|
+
let bodyContext = indent(currentContext);
|
|
69
73
|
const modifiedBody = {
|
|
70
74
|
...member.body,
|
|
71
75
|
statements: bodyStatements,
|
|
72
76
|
};
|
|
77
|
+
// Generate parameter destructuring statements BEFORE emitting the body so
|
|
78
|
+
// any renamed locals are visible to the body emitter via localNameMap.
|
|
79
|
+
const bodyInd = getIndent(bodyContext);
|
|
80
|
+
const [parameterDestructuringStmts, destructuringContext] = paramsResult.destructuringParams.length > 0
|
|
81
|
+
? generateParameterDestructuring(paramsResult.destructuringParams, bodyInd, bodyContext)
|
|
82
|
+
: [[], bodyContext];
|
|
83
|
+
bodyContext = destructuringContext;
|
|
73
84
|
const [bodyCode, finalContext] = emitBlockStatement(modifiedBody, bodyContext);
|
|
74
85
|
// Inject parameter destructuring statements at the start of the body
|
|
75
86
|
let finalBodyCode = bodyCode;
|
|
76
|
-
if (
|
|
77
|
-
const
|
|
78
|
-
const [destructuringStmts] = generateParameterDestructuring(paramsResult.destructuringParams, bodyInd, finalContext);
|
|
87
|
+
if (parameterDestructuringStmts.length > 0) {
|
|
88
|
+
const destructuringStmts = parameterDestructuringStmts;
|
|
79
89
|
// Inject lines after opening brace
|
|
80
90
|
const lines = bodyCode.split("\n");
|
|
81
91
|
if (lines.length > 1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/constructors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,8BAA8B,GAAG,CACrC,MAA8B,EAC9B,OAAuB,EACP,EAAE;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC3C,
|
|
1
|
+
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/constructors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAA4B,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,cAAc,EAMf,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAA4B,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,cAAc,EAMf,MAAM,mBAAmB,CAAC;AA4C3B;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,aAAa,GAAG;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,EACrD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAgNzB,CAAC"}
|
|
@@ -22,12 +22,15 @@ const getAsyncBodyReturnType = (isAsync, returnType) => {
|
|
|
22
22
|
};
|
|
23
23
|
const seedLocalNameMapFromParameters = (params, context) => {
|
|
24
24
|
const map = new Map(context.localNameMap ?? []);
|
|
25
|
+
const used = new Set();
|
|
25
26
|
for (const p of params) {
|
|
26
27
|
if (p.pattern.kind === "identifierPattern") {
|
|
27
|
-
|
|
28
|
+
const emitted = escapeCSharpIdentifier(p.pattern.name);
|
|
29
|
+
map.set(p.pattern.name, emitted);
|
|
30
|
+
used.add(emitted);
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
|
-
return { ...context, localNameMap: map };
|
|
33
|
+
return { ...context, localNameMap: map, usedLocalNames: used };
|
|
31
34
|
};
|
|
32
35
|
/**
|
|
33
36
|
* Emit a method declaration
|
|
@@ -39,6 +42,7 @@ export const emitMethodMember = (member, context) => {
|
|
|
39
42
|
typeParameterNameMap: context.typeParameterNameMap,
|
|
40
43
|
returnType: context.returnType,
|
|
41
44
|
localNameMap: context.localNameMap,
|
|
45
|
+
usedLocalNames: context.usedLocalNames,
|
|
42
46
|
};
|
|
43
47
|
const ind = getIndent(context);
|
|
44
48
|
let currentContext = context;
|
|
@@ -111,6 +115,12 @@ export const emitMethodMember = (member, context) => {
|
|
|
111
115
|
// Method body
|
|
112
116
|
// Use withScoped to set typeParameters and returnType for nested expressions
|
|
113
117
|
const baseBodyContext = seedLocalNameMapFromParameters(member.parameters, withAsync(indent(currentContext), member.isAsync));
|
|
118
|
+
// Generate parameter destructuring statements BEFORE emitting the body so
|
|
119
|
+
// any renamed locals are visible to the body emitter via localNameMap.
|
|
120
|
+
const bodyInd = getIndent(baseBodyContext);
|
|
121
|
+
const [parameterDestructuringStmts, destructuringContext] = paramsResult.destructuringParams.length > 0
|
|
122
|
+
? generateParameterDestructuring(paramsResult.destructuringParams, bodyInd, baseBodyContext)
|
|
123
|
+
: [[], baseBodyContext];
|
|
114
124
|
if (!member.body) {
|
|
115
125
|
// Abstract method without body
|
|
116
126
|
// Emit attributes before the method declaration
|
|
@@ -125,7 +135,7 @@ export const emitMethodMember = (member, context) => {
|
|
|
125
135
|
// Reuse methodTypeParams defined at the top of this function
|
|
126
136
|
// Note: member.body is guaranteed to exist here (early return above handles undefined case)
|
|
127
137
|
const body = member.body;
|
|
128
|
-
const [bodyCode, finalContext] = withScoped(
|
|
138
|
+
const [bodyCode, finalContext] = withScoped(destructuringContext, {
|
|
129
139
|
typeParameters: methodTypeParams,
|
|
130
140
|
returnType: getAsyncBodyReturnType(member.isAsync, member.returnType),
|
|
131
141
|
}, (scopedCtx) => emitBlockStatement(body, scopedCtx));
|
|
@@ -148,12 +158,10 @@ export const emitMethodMember = (member, context) => {
|
|
|
148
158
|
}
|
|
149
159
|
// Inject destructuring and out parameter initializations
|
|
150
160
|
let finalBodyCode = bodyCode;
|
|
151
|
-
const bodyInd = getIndent(baseBodyContext);
|
|
152
161
|
const injectLines = [];
|
|
153
162
|
// Generate parameter destructuring statements
|
|
154
|
-
if (
|
|
155
|
-
|
|
156
|
-
injectLines.push(...destructuringStmts);
|
|
163
|
+
if (parameterDestructuringStmts.length > 0) {
|
|
164
|
+
injectLines.push(...parameterDestructuringStmts);
|
|
157
165
|
}
|
|
158
166
|
// Add out parameter initializations
|
|
159
167
|
for (const outParam of outParams) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAEL,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,sBAAsB,GAAG,CAC7B,OAAgB,EAChB,UAA8B,EACV,EAAE;IACtB,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU;QAAE,OAAO,UAAU,CAAC;IAC/C,IACE,UAAU,CAAC,IAAI,KAAK,eAAe;QACnC,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS;YAC5B,UAAU,CAAC,IAAI,KAAK,MAAM;YAC1B,UAAU,CAAC,IAAI,KAAK,WAAW,CAAC;QAClC,UAAU,CAAC,aAAa,EAAE,MAAM,KAAK,CAAC,EACtC,CAAC;QACD,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CACrC,MAA8B,EAC9B,OAAuB,EACP,EAAE;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC3C,
|
|
1
|
+
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,cAAc,EAKf,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,aAAa,GAAG;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,EACvD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,cAAc,EAKf,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,aAAa,GAAG;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,EACvD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CA2JzB,CAAC"}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
import { dedent, getIndent, indent, withScoped, } from "../../../types.js";
|
|
5
5
|
import { emitExpression } from "../../../expression-emitter.js";
|
|
6
6
|
import { emitType } from "../../../type-emitter.js";
|
|
7
|
-
import { escapeCSharpIdentifier } from "../../../emitter-types/index.js";
|
|
8
7
|
import { emitAttributes } from "../../../core/attributes.js";
|
|
9
8
|
import { emitBlockStatement } from "../../blocks.js";
|
|
10
9
|
import { emitCSharpName } from "../../../naming-policy.js";
|
|
10
|
+
import { allocateLocalName } from "../../../core/local-names.js";
|
|
11
11
|
/**
|
|
12
12
|
* Emit a property declaration
|
|
13
13
|
*/
|
|
@@ -85,37 +85,50 @@ export const emitPropertyMember = (member, context) => {
|
|
|
85
85
|
if (member.getterBody) {
|
|
86
86
|
lines.push(`${bodyInd}get`);
|
|
87
87
|
const getterBodyContext = indent(bodyContext);
|
|
88
|
-
const
|
|
88
|
+
const savedUsed = getterBodyContext.usedLocalNames;
|
|
89
|
+
const getterEmitContext = {
|
|
90
|
+
...getterBodyContext,
|
|
91
|
+
usedLocalNames: new Set(),
|
|
92
|
+
};
|
|
93
|
+
const [getterBlock, getterCtx] = withScoped(getterEmitContext, { returnType: member.type }, (scopedCtx) => emitBlockStatement(member.getterBody, scopedCtx));
|
|
89
94
|
lines.push(getterBlock);
|
|
90
|
-
bodyContext = dedent(getterCtx);
|
|
95
|
+
bodyContext = { ...dedent(getterCtx), usedLocalNames: savedUsed };
|
|
91
96
|
}
|
|
92
97
|
if (member.setterBody) {
|
|
93
98
|
lines.push(`${bodyInd}set`);
|
|
94
99
|
const setterBodyContext = indent(bodyContext);
|
|
100
|
+
const savedUsed = setterBodyContext.usedLocalNames;
|
|
101
|
+
// C# property setters have an implicit `value` parameter. Seed it to avoid CS0136 when
|
|
102
|
+
// user code declares `value` as a local (valid in TS when setter param name differs).
|
|
103
|
+
let setterEmitContext = {
|
|
104
|
+
...setterBodyContext,
|
|
105
|
+
usedLocalNames: new Set(["value"]),
|
|
106
|
+
};
|
|
95
107
|
const setterParamName = member.setterParamName;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
108
|
+
let aliasLine;
|
|
109
|
+
let scopedLocalNameMap = setterBodyContext.localNameMap;
|
|
110
|
+
if (setterParamName && setterParamName !== "value") {
|
|
111
|
+
const alloc = allocateLocalName(setterParamName, setterEmitContext);
|
|
112
|
+
setterEmitContext = alloc.context;
|
|
113
|
+
const nextMap = new Map(setterBodyContext.localNameMap ?? []);
|
|
114
|
+
nextMap.set(setterParamName, alloc.emittedName);
|
|
115
|
+
scopedLocalNameMap = nextMap;
|
|
116
|
+
const stmtInd = getIndent(setterBodyContext);
|
|
117
|
+
aliasLine = `${stmtInd}var ${alloc.emittedName} = value;`;
|
|
118
|
+
}
|
|
119
|
+
const [rawSetterBlock, setterCtx] = withScoped(setterEmitContext, { localNameMap: scopedLocalNameMap }, (scopedCtx) => emitBlockStatement(member.setterBody, scopedCtx));
|
|
104
120
|
const setterBlock = (() => {
|
|
105
|
-
if (!
|
|
121
|
+
if (!aliasLine)
|
|
106
122
|
return rawSetterBlock;
|
|
107
|
-
const escapedParam = escapeCSharpIdentifier(setterParamName);
|
|
108
|
-
const stmtInd = getIndent(setterBodyContext);
|
|
109
|
-
const injectLine = `${stmtInd}var ${escapedParam} = value;`;
|
|
110
123
|
const blockLines = rawSetterBlock.split("\n");
|
|
111
124
|
if (blockLines.length > 1) {
|
|
112
|
-
blockLines.splice(1, 0,
|
|
125
|
+
blockLines.splice(1, 0, aliasLine, "");
|
|
113
126
|
return blockLines.join("\n");
|
|
114
127
|
}
|
|
115
128
|
return rawSetterBlock;
|
|
116
129
|
})();
|
|
117
130
|
lines.push(setterBlock);
|
|
118
|
-
bodyContext = dedent(setterCtx);
|
|
131
|
+
bodyContext = { ...dedent(setterCtx), usedLocalNames: savedUsed };
|
|
119
132
|
}
|
|
120
133
|
lines.push(`${bodyInd}}`);
|
|
121
134
|
return [lines.join("\n"), dedent(bodyContext)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAEL,MAAM,EACN,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditionals.d.ts","sourceRoot":"","sources":["../../../src/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAgB,WAAW,EAAU,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,cAAc,EAKf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"conditionals.d.ts","sourceRoot":"","sources":["../../../src/statements/control/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAgB,WAAW,EAAU,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,cAAc,EAKf,MAAM,gBAAgB,CAAC;AAmgBxB;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,EACnD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAoiBzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC,EACvD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CA4CzB,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { getIndent, indent, dedent, } from "../../types.js";
|
|
5
5
|
import { emitExpression } from "../../expression-emitter.js";
|
|
6
|
+
import { emitIdentifier } from "../../expressions/identifiers.js";
|
|
6
7
|
import { emitStatement } from "../../statement-emitter.js";
|
|
7
8
|
import { resolveTypeAlias, stripNullish, findUnionMemberIndex, getAllPropertySignatures, isDefinitelyValueType, } from "../../core/type-resolution.js";
|
|
8
9
|
import { escapeCSharpIdentifier } from "../../emitter-types/index.js";
|
|
@@ -114,7 +115,8 @@ const tryResolveInGuard = (condition, context) => {
|
|
|
114
115
|
const nextId = (context.tempVarId ?? 0) + 1;
|
|
115
116
|
const ctxWithId = { ...context, tempVarId: nextId };
|
|
116
117
|
const narrowedName = `${originalName}__${memberN}_${nextId}`;
|
|
117
|
-
const
|
|
118
|
+
const [rhsFrag] = emitIdentifier(condition.right, context);
|
|
119
|
+
const escapedOrig = rhsFrag.text;
|
|
118
120
|
const escapedNarrow = escapeCSharpIdentifier(narrowedName);
|
|
119
121
|
const narrowedMap = new Map(ctxWithId.narrowedBindings ?? []);
|
|
120
122
|
const memberType = resolved.types[memberN - 1];
|
|
@@ -184,7 +186,8 @@ const tryResolvePredicateGuard = (call, context) => {
|
|
|
184
186
|
const nextId = (context.tempVarId ?? 0) + 1;
|
|
185
187
|
const ctxWithId = { ...context, tempVarId: nextId };
|
|
186
188
|
const narrowedName = `${originalName}__${memberN}_${nextId}`;
|
|
187
|
-
const
|
|
189
|
+
const [argFrag] = emitIdentifier(arg, context);
|
|
190
|
+
const escapedOrig = argFrag.text;
|
|
188
191
|
const escapedNarrow = escapeCSharpIdentifier(narrowedName);
|
|
189
192
|
const narrowedMap = new Map(ctxWithId.narrowedBindings ?? []);
|
|
190
193
|
narrowedMap.set(originalName, {
|
|
@@ -220,9 +223,10 @@ const tryResolveInstanceofGuard = (condition, context) => {
|
|
|
220
223
|
if (condition.left.kind !== "identifier")
|
|
221
224
|
return undefined;
|
|
222
225
|
const originalName = condition.left.name;
|
|
223
|
-
const
|
|
224
|
-
const
|
|
225
|
-
const
|
|
226
|
+
const [lhsFrag, ctxAfterLhs] = emitIdentifier(condition.left, context);
|
|
227
|
+
const escapedOrig = lhsFrag.text;
|
|
228
|
+
const nextId = (ctxAfterLhs.tempVarId ?? 0) + 1;
|
|
229
|
+
const ctxWithId = { ...ctxAfterLhs, tempVarId: nextId };
|
|
226
230
|
// Emit RHS as a type name (e.g., global::System.String)
|
|
227
231
|
const [rhsFrag, ctxAfterRhs] = emitExpression(condition.right, ctxWithId);
|
|
228
232
|
const rhsTypeText = rhsFrag.text;
|
|
@@ -625,50 +629,83 @@ export const emitIfStatement = (stmt, context) => {
|
|
|
625
629
|
}
|
|
626
630
|
// Case D: Nullable value type narrowing
|
|
627
631
|
// if (id !== null) { ... } → id becomes id.Value in then-branch
|
|
628
|
-
const
|
|
632
|
+
const simpleNullableGuard = tryResolveSimpleNullableGuard(stmt.condition);
|
|
633
|
+
const nullableGuard = simpleNullableGuard ?? tryResolveNullableGuard(stmt.condition, context);
|
|
629
634
|
if (nullableGuard && nullableGuard.isValueType) {
|
|
630
|
-
const { identifierName, narrowsInThen, strippedType } = nullableGuard;
|
|
631
|
-
|
|
635
|
+
const { identifierName, identifierExpr, narrowsInThen, strippedType } = nullableGuard;
|
|
636
|
+
// IMPORTANT: Avoid stacking `.Value` when:
|
|
637
|
+
// - we are emitting an else-if chain, and
|
|
638
|
+
// - an outer nullable guard already narrowed the identifier in the else-branch.
|
|
639
|
+
//
|
|
640
|
+
// Example (TS):
|
|
641
|
+
// if (x === undefined) { ... } else if (x !== undefined) { use(x) }
|
|
642
|
+
//
|
|
643
|
+
// In C#, we might narrow `x` in the outer ELSE (x.Value). If we build a new
|
|
644
|
+
// narrowed binding by reading `x` via emitIdentifier (which consults narrowedBindings),
|
|
645
|
+
// we'd accidentally create `x.Value.Value`.
|
|
646
|
+
//
|
|
647
|
+
// So: build the `.Value` access from the *raw* identifier (respecting CS0136 remaps),
|
|
648
|
+
// but ignoring existing narrowedBindings.
|
|
649
|
+
const [idFrag] = emitIdentifier(identifierExpr, {
|
|
650
|
+
...context,
|
|
651
|
+
narrowedBindings: undefined,
|
|
652
|
+
});
|
|
632
653
|
// Create narrowed binding: id → id.Value
|
|
633
654
|
const narrowedMap = new Map(context.narrowedBindings ?? []);
|
|
634
655
|
narrowedMap.set(identifierName, {
|
|
635
656
|
kind: "expr",
|
|
636
|
-
exprText: `${
|
|
657
|
+
exprText: `${idFrag.text}.Value`,
|
|
637
658
|
type: strippedType,
|
|
638
659
|
});
|
|
639
|
-
//
|
|
640
|
-
|
|
641
|
-
//
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
...indent(finalContext),
|
|
659
|
-
narrowedBindings: !narrowsInThen
|
|
660
|
+
// Soundness: In compound conditions (A && B), we must NOT apply "else" narrowing.
|
|
661
|
+
// `!(A && (id == null))` does not imply `id != null` unless A is provably true.
|
|
662
|
+
//
|
|
663
|
+
// Therefore:
|
|
664
|
+
// - For simple guards: allow both THEN (id != null) and ELSE (id == null) narrowing.
|
|
665
|
+
// - For &&-nested guards: only allow THEN narrowing when the guard is `!= null`.
|
|
666
|
+
const isAndCondition = stmt.condition.kind === "logical" && stmt.condition.operator === "&&";
|
|
667
|
+
if (isAndCondition && !simpleNullableGuard && !narrowsInThen) {
|
|
668
|
+
// `id == null` inside `&&` - narrowing would only be valid in the THEN branch
|
|
669
|
+
// (and even then it's "id is null", not `.Value`-usable). Skip nullable rewrite.
|
|
670
|
+
// Fall through to standard if emission.
|
|
671
|
+
}
|
|
672
|
+
else {
|
|
673
|
+
// Emit condition (boolean context)
|
|
674
|
+
const [condText, condCtxAfterCond] = emitBooleanCondition(stmt.condition, (e, ctx) => emitExpression(e, ctx), context);
|
|
675
|
+
// Apply narrowing to appropriate branch
|
|
676
|
+
const thenCtx = {
|
|
677
|
+
...indent(condCtxAfterCond),
|
|
678
|
+
narrowedBindings: narrowsInThen
|
|
660
679
|
? narrowedMap
|
|
661
|
-
:
|
|
680
|
+
: condCtxAfterCond.narrowedBindings,
|
|
662
681
|
};
|
|
663
|
-
const [
|
|
664
|
-
code
|
|
665
|
-
finalContext = dedent(
|
|
682
|
+
const [thenCode, thenCtxAfter] = emitStatement(stmt.thenStatement, thenCtx);
|
|
683
|
+
let code = `${ind}if (${condText})\n${thenCode}`;
|
|
684
|
+
let finalContext = dedent(thenCtxAfter);
|
|
685
|
+
// Clear narrowing after branch
|
|
666
686
|
finalContext = {
|
|
667
687
|
...finalContext,
|
|
668
688
|
narrowedBindings: context.narrowedBindings,
|
|
669
689
|
};
|
|
690
|
+
if (stmt.elseStatement) {
|
|
691
|
+
const elseCtx = {
|
|
692
|
+
...indent(finalContext),
|
|
693
|
+
narrowedBindings: !narrowsInThen
|
|
694
|
+
? simpleNullableGuard
|
|
695
|
+
? narrowedMap
|
|
696
|
+
: context.narrowedBindings
|
|
697
|
+
: context.narrowedBindings,
|
|
698
|
+
};
|
|
699
|
+
const [elseCode, elseCtxAfter] = emitStatement(stmt.elseStatement, elseCtx);
|
|
700
|
+
code += `\n${ind}else\n${elseCode}`;
|
|
701
|
+
finalContext = dedent(elseCtxAfter);
|
|
702
|
+
finalContext = {
|
|
703
|
+
...finalContext,
|
|
704
|
+
narrowedBindings: context.narrowedBindings,
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
return [code, finalContext];
|
|
670
708
|
}
|
|
671
|
-
return [code, finalContext];
|
|
672
709
|
}
|
|
673
710
|
// Standard if-statement emission (no narrowing)
|
|
674
711
|
const [condText, condCtxAfterCond] = emitBooleanCondition(stmt.condition, (e, ctx) => emitExpression(e, ctx), context);
|