Skip to content

Commit 012d111

Browse files
committed
Merge pull request microsoft#8034 from Microsoft/enumsComputedPropertyNames
don't generate temp variables for computed property names in enums
2 parents 6cea256 + 286d907 commit 012d111

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
@@ -1276,7 +1276,7 @@ namespace ts {
12761276
//
12771277

12781278
const prefix = getClassMemberPrefix(node, member);
1279-
const memberName = getExpressionForPropertyName(member);
1279+
const memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
12801280
const descriptor = languageVersion > ScriptTarget.ES3
12811281
? member.kind === SyntaxKind.PropertyDeclaration
12821282
// We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
@@ -1750,10 +1750,12 @@ namespace ts {
17501750
*
17511751
* @param member The member whose name should be converted into an expression.
17521752
*/
1753-
function getExpressionForPropertyName(member: ClassElement | EnumMember): Expression {
1753+
function getExpressionForPropertyName(member: ClassElement | EnumMember, generateNameForComputedPropertyName: boolean): Expression {
17541754
const name = member.name;
17551755
if (isComputedPropertyName(name)) {
1756-
return getGeneratedNameForNode(name);
1756+
return generateNameForComputedPropertyName
1757+
? getGeneratedNameForNode(name)
1758+
: (<ComputedPropertyName>name).expression;
17571759
}
17581760
else if (isIdentifier(name)) {
17591761
return createLiteral(name.text);
@@ -2337,7 +2339,10 @@ namespace ts {
23372339
* @param member The enum member node.
23382340
*/
23392341
function transformEnumMember(member: EnumMember): Statement {
2340-
const name = getExpressionForPropertyName(member);
2342+
// enums don't support computed properties
2343+
// we pass false as 'generateNameForComputedPropertyName' for a backward compatibility purposes
2344+
// old emitter always generate 'expression' part of the name as-is.
2345+
const name = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ false);
23412346
return createStatement(
23422347
createAssignment(
23432348
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)