don't generate temp variables for computed property names in enums

This commit is contained in:
Vladimir Matveev
2016-04-12 14:18:58 -07:00
parent a27b4d07ae
commit 286d9079eb
2 changed files with 10 additions and 5 deletions

View File

@@ -1268,7 +1268,7 @@ namespace ts {
//
const prefix = getClassMemberPrefix(node, member);
const memberName = getExpressionForPropertyName(member);
const memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
const descriptor = languageVersion > ScriptTarget.ES3
? member.kind === SyntaxKind.PropertyDeclaration
// 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 {
*
* @param member The member whose name should be converted into an expression.
*/
function getExpressionForPropertyName(member: ClassElement | EnumMember): Expression {
function getExpressionForPropertyName(member: ClassElement | EnumMember, generateNameForComputedPropertyName: boolean): Expression {
const name = member.name;
if (isComputedPropertyName(name)) {
return getGeneratedNameForNode(name);
return generateNameForComputedPropertyName
? getGeneratedNameForNode(name)
: (<ComputedPropertyName>name).expression;
}
else if (isIdentifier(name)) {
return createLiteral(name.text);
@@ -2329,7 +2331,10 @@ namespace ts {
* @param member The enum member node.
*/
function transformEnumMember(member: EnumMember): Statement {
const name = getExpressionForPropertyName(member);
// enums don't support computed properties
// we pass false as 'generateNameForComputedPropertyName' for a backward compatibility purposes
// old emitter always generate 'expression' part of the name as-is.
const name = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ false);
return createStatement(
createAssignment(
createElementAccess(

View File

@@ -80,7 +80,7 @@ z[3].toExponential();
z[4].toExponential();
var X;
(function (X) {
X[X["1"] = 1] = "1";
X[X[1] = 1] = 1;
X[X[2] = 2] = 2;
X[X["3"] = 3] = "3";
X[X["4"] = 4] = "4";