From d2e96c17791fab2dc7e6ee5c266e32ba64392410 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 22 Jan 2015 14:45:55 -0800 Subject: [PATCH] Simplify enum emit. --- src/compiler/emitter.ts | 48 +++++++++---------- .../reference/sourceMapValidationEnums.js.map | 2 +- .../sourceMapValidationEnums.sourcemap.txt | 31 ++++++++++-- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index dafd03717a6..47f75dcf8ad 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3656,7 +3656,7 @@ module ts { write(") {"); increaseIndent(); scopeEmitStart(node); - emitEnumMemberDeclarations(isConstEnum); + emitLines(node.members); decreaseIndent(); writeLine(); emitToken(SyntaxKind.CloseBraceToken, node.members.end); @@ -3678,31 +3678,29 @@ module ts { write(";"); } emitTrailingComments(node); + } - function emitEnumMemberDeclarations(isConstEnum: boolean) { - forEach(node.members, member => { - writeLine(); - emitLeadingComments(member); - emitStart(member); - write(resolver.getLocalNameOfContainer(node)); - write("["); - write(resolver.getLocalNameOfContainer(node)); - write("["); - emitExpressionForPropertyName(member.name); - write("] = "); - if (member.initializer && !isConstEnum) { - emit(member.initializer); - } - else { - write(resolver.getEnumMemberValue(member).toString()); - } - write("] = "); - emitExpressionForPropertyName(member.name); - emitEnd(member); - write(";"); - emitTrailingComments(member); - }); + function emitEnumMember(node: EnumMember) { + var enumParent = node.parent; + emitLeadingComments(node); + emitStart(node); + write(resolver.getLocalNameOfContainer(enumParent)); + write("["); + write(resolver.getLocalNameOfContainer(enumParent)); + write("["); + emitExpressionForPropertyName(node.name); + write("] = "); + if (node.initializer && !isConst(enumParent)) { + emit(node.initializer); } + else { + write(resolver.getEnumMemberValue(node).toString()); + } + write("] = "); + emitExpressionForPropertyName(node.name); + emitEnd(node); + write(";"); + emitTrailingComments(node); } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration: ModuleDeclaration): ModuleDeclaration { @@ -4099,6 +4097,8 @@ module ts { return emitInterfaceDeclaration(node); case SyntaxKind.EnumDeclaration: return emitEnumDeclaration(node); + case SyntaxKind.EnumMember: + return emitEnumMember(node); case SyntaxKind.ModuleDeclaration: return emitModuleDeclaration(node); case SyntaxKind.ImportDeclaration: diff --git a/tests/baselines/reference/sourceMapValidationEnums.js.map b/tests/baselines/reference/sourceMapValidationEnums.js.map index 721e0a3b48b..1627788c6b6 100644 --- a/tests/baselines/reference/sourceMapValidationEnums.js.map +++ b/tests/baselines/reference/sourceMapValidationEnums.js.map @@ -1,2 +1,2 @@ //// [sourceMapValidationEnums.js.map] -{"version":3,"file":"sourceMapValidationEnums.js","sourceRoot":"","sources":["sourceMapValidationEnums.ts"],"names":["e","e2","e3"],"mappings":"AAAA,IAAK,CAIJ;AAJD,WAAK,CAAC;IACFA,mBAACA;IACDA,mBAACA;IACDA,mBAACA;AACLA,CAACA,EAJI,CAAC,KAAD,CAAC,QAIL;AACD,IAAK,EAKJ;AALD,WAAK,EAAE;IACHC,aAAIA,EAAEA,OAAAA;IACNA,aAAIA,EAAEA,OAAAA;IACNA,sBAACA;IACDA,wBAAEA;AACNA,CAACA,EALI,EAAE,KAAF,EAAE,QAKN;AACD,IAAK,EACJ;AADD,WAAK,EAAE;AACPC,CAACA,EADI,EAAE,KAAF,EAAE,QACN"} \ No newline at end of file +{"version":3,"file":"sourceMapValidationEnums.js","sourceRoot":"","sources":["sourceMapValidationEnums.ts"],"names":["e","e2","e3"],"mappings":"AAAA,IAAK,CAIJ;AAJD,WAAK,CAAC;IACFA,mBAACA,CAAAA;IACDA,mBAACA,CAAAA;IACDA,mBAACA,CAAAA;AACLA,CAACA,EAJI,CAAC,KAAD,CAAC,QAIL;AACD,IAAK,EAKJ;AALD,WAAK,EAAE;IACHC,aAAIA,EAAEA,OAAAA,CAAAA;IACNA,aAAIA,EAAEA,OAAAA,CAAAA;IACNA,sBAACA,CAAAA;IACDA,wBAAEA,CAAAA;AACNA,CAACA,EALI,EAAE,KAAF,EAAE,QAKN;AACD,IAAK,EACJ;AADD,WAAK,EAAE;AACPC,CAACA,EADI,EAAE,KAAF,EAAE,QACN"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapValidationEnums.sourcemap.txt b/tests/baselines/reference/sourceMapValidationEnums.sourcemap.txt index 18148fc281b..337aa0989d3 100644 --- a/tests/baselines/reference/sourceMapValidationEnums.sourcemap.txt +++ b/tests/baselines/reference/sourceMapValidationEnums.sourcemap.txt @@ -39,31 +39,40 @@ sourceFile:sourceMapValidationEnums.ts >>> e[e["x"] = 0] = "x"; 1->^^^^ 2 > ^^^^^^^^^^^^^^^^^^^ -3 > ^^-> +3 > ^ +4 > ^-> 1-> { > 2 > x +3 > 1->Emitted(3, 5) Source(2, 5) + SourceIndex(0) name (e) 2 >Emitted(3, 24) Source(2, 6) + SourceIndex(0) name (e) +3 >Emitted(3, 25) Source(2, 6) + SourceIndex(0) name (e) --- >>> e[e["y"] = 1] = "y"; 1->^^^^ 2 > ^^^^^^^^^^^^^^^^^^^ -3 > ^^-> +3 > ^ +4 > ^-> 1->, > 2 > y +3 > 1->Emitted(4, 5) Source(3, 5) + SourceIndex(0) name (e) 2 >Emitted(4, 24) Source(3, 6) + SourceIndex(0) name (e) +3 >Emitted(4, 25) Source(3, 6) + SourceIndex(0) name (e) --- >>> e[e["x"] = 2] = "x"; 1->^^^^ 2 > ^^^^^^^^^^^^^^^^^^^ +3 > ^ 1->, > 2 > x +3 > 1->Emitted(5, 5) Source(4, 5) + SourceIndex(0) name (e) 2 >Emitted(5, 24) Source(4, 6) + SourceIndex(0) name (e) +3 >Emitted(5, 25) Source(4, 6) + SourceIndex(0) name (e) --- >>>})(e || (e = {})); 1 > @@ -128,51 +137,63 @@ sourceFile:sourceMapValidationEnums.ts 2 > ^^^^^^^^^^^^^ 3 > ^^ 4 > ^^^^^^^ -5 > ^^-> +5 > ^ +6 > ^-> 1-> { > 2 > x = 3 > 10 4 > +5 > 1->Emitted(9, 5) Source(7, 5) + SourceIndex(0) name (e2) 2 >Emitted(9, 18) Source(7, 9) + SourceIndex(0) name (e2) 3 >Emitted(9, 20) Source(7, 11) + SourceIndex(0) name (e2) 4 >Emitted(9, 27) Source(7, 11) + SourceIndex(0) name (e2) +5 >Emitted(9, 28) Source(7, 11) + SourceIndex(0) name (e2) --- >>> e2[e2["y"] = 10] = "y"; 1->^^^^ 2 > ^^^^^^^^^^^^^ 3 > ^^ 4 > ^^^^^^^ -5 > ^^-> +5 > ^ +6 > ^-> 1->, > 2 > y = 3 > 10 4 > +5 > 1->Emitted(10, 5) Source(8, 5) + SourceIndex(0) name (e2) 2 >Emitted(10, 18) Source(8, 9) + SourceIndex(0) name (e2) 3 >Emitted(10, 20) Source(8, 11) + SourceIndex(0) name (e2) 4 >Emitted(10, 27) Source(8, 11) + SourceIndex(0) name (e2) +5 >Emitted(10, 28) Source(8, 11) + SourceIndex(0) name (e2) --- >>> e2[e2["z"] = 11] = "z"; 1->^^^^ 2 > ^^^^^^^^^^^^^^^^^^^^^^ -3 > ^^^^-> +3 > ^ +4 > ^^^-> 1->, > 2 > z +3 > 1->Emitted(11, 5) Source(9, 5) + SourceIndex(0) name (e2) 2 >Emitted(11, 27) Source(9, 6) + SourceIndex(0) name (e2) +3 >Emitted(11, 28) Source(9, 6) + SourceIndex(0) name (e2) --- >>> e2[e2["x2"] = 12] = "x2"; 1->^^^^ 2 > ^^^^^^^^^^^^^^^^^^^^^^^^ +3 > ^ 1->, > 2 > x2 +3 > 1->Emitted(12, 5) Source(10, 5) + SourceIndex(0) name (e2) 2 >Emitted(12, 29) Source(10, 7) + SourceIndex(0) name (e2) +3 >Emitted(12, 30) Source(10, 7) + SourceIndex(0) name (e2) --- >>>})(e2 || (e2 = {})); 1 >