Simplify enum emit.

This commit is contained in:
Cyrus Najmabadi
2015-01-22 14:45:55 -08:00
parent 0ff051f119
commit d2e96c1779
3 changed files with 51 additions and 30 deletions
+24 -24
View File
@@ -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 = <EnumDeclaration>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(<InterfaceDeclaration>node);
case SyntaxKind.EnumDeclaration:
return emitEnumDeclaration(<EnumDeclaration>node);
case SyntaxKind.EnumMember:
return emitEnumMember(<EnumMember>node);
case SyntaxKind.ModuleDeclaration:
return emitModuleDeclaration(<ModuleDeclaration>node);
case SyntaxKind.ImportDeclaration:
@@ -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"}
{"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"}
@@ -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 >