Skip to content

Commit 286d907

Browse files
committed
don't generate temp variables for computed property names in enums
1 parent a27b4d0 commit 286d907

2 files changed

Lines changed: 10 additions & 5 deletions

File tree

src/compiler/transformers/ts.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,7 +1268,7 @@ namespace ts {
12681268
//
12691269

12701270
const prefix = getClassMemberPrefix(node, member);
1271-
const memberName = getExpressionForPropertyName(member);
1271+
const memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
12721272
const descriptor = languageVersion > ScriptTarget.ES3
12731273
? member.kind === SyntaxKind.PropertyDeclaration
12741274
// We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
@@ -1742,10 +1742,12 @@ namespace ts {
17421742
*
17431743
* @param member The member whose name should be converted into an expression.
17441744
*/
1745-
function getExpressionForPropertyName(member: ClassElement | EnumMember): Expression {
1745+
function getExpressionForPropertyName(member: ClassElement | EnumMember, generateNameForComputedPropertyName: boolean): Expression {
17461746
const name = member.name;
17471747
if (isComputedPropertyName(name)) {
1748-
return getGeneratedNameForNode(name);
1748+
return generateNameForComputedPropertyName
1749+
? getGeneratedNameForNode(name)
1750+
: (<ComputedPropertyName>name).expression;
17491751
}
17501752
else if (isIdentifier(name)) {
17511753
return createLiteral(name.text);
@@ -2329,7 +2331,10 @@ namespace ts {
23292331
* @param member The enum member node.
23302332
*/
23312333
function transformEnumMember(member: EnumMember): Statement {
2332-
const name = getExpressionForPropertyName(member);
2334+
// enums don't support computed properties
2335+
// we pass false as 'generateNameForComputedPropertyName' for a backward compatibility purposes
2336+
// old emitter always generate 'expression' part of the name as-is.
2337+
const name = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ false);
23332338
return createStatement(
23342339
createAssignment(
23352340
createElementAccess(

tests/baselines/reference/literalsInComputedProperties1.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ z[3].toExponential();
8080
z[4].toExponential();
8181
var X;
8282
(function (X) {
83-
X[X["1"] = 1] = "1";
83+
X[X[1] = 1] = 1;
8484
X[X[2] = 2] = 2;
8585
X[X["3"] = 3] = "3";
8686
X[X["4"] = 4] = "4";

0 commit comments

Comments
 (0)