@@ -2074,19 +2074,19 @@ module ts {
20742074 sourceMapDir = getDirectoryPath ( normalizePath ( jsFilePath ) ) ;
20752075 }
20762076
2077- function emitNodeWithSourceMap ( node : Node ) {
2077+ function emitNodeWithSourceMap ( node : Node , allowGeneratedIdentifiers ?: boolean ) {
20782078 if ( node ) {
20792079 if ( nodeIsSynthesized ( node ) ) {
2080- return emitNodeWithoutSourceMap ( node ) ;
2080+ return emitNodeWithoutSourceMap ( node , /*allowGeneratedIdentifiers*/ false ) ;
20812081 }
20822082 if ( node . kind != SyntaxKind . SourceFile ) {
20832083 recordEmitNodeStartSpan ( node ) ;
2084- emitNodeWithoutSourceMap ( node ) ;
2084+ emitNodeWithoutSourceMap ( node , allowGeneratedIdentifiers ) ;
20852085 recordEmitNodeEndSpan ( node ) ;
20862086 }
20872087 else {
20882088 recordNewSourceFileStart ( < SourceFile > node ) ;
2089- emitNodeWithoutSourceMap ( node ) ;
2089+ emitNodeWithoutSourceMap ( node , /*allowGeneratedIdentifiers*/ false ) ;
20902090 }
20912091 }
20922092 }
@@ -2623,17 +2623,24 @@ module ts {
26232623 }
26242624 }
26252625
2626- function getBlockScopedVariableId ( node : Identifier ) : number {
2627- // return undefined for synthesized nodes
2628- return ! nodeIsSynthesized ( node ) && resolver . getBlockScopedVariableId ( node ) ;
2626+ function getGeneratedNameForIdentifier ( node : Identifier ) : string {
2627+ if ( nodeIsSynthesized ( node ) || ! generatedBlockScopeNames ) {
2628+ return undefined ;
2629+ }
2630+
2631+ var variableId = resolver . getBlockScopedVariableId ( node )
2632+ if ( variableId === undefined ) {
2633+ return undefined ;
2634+ }
2635+
2636+ return generatedBlockScopeNames [ variableId ] ;
26292637 }
26302638
2631- function emitIdentifier ( node : Identifier ) {
2632- let variableId = getBlockScopedVariableId ( node ) ;
2633- if ( variableId !== undefined && generatedBlockScopeNames ) {
2634- let text = generatedBlockScopeNames [ variableId ] ;
2635- if ( text ) {
2636- write ( text ) ;
2639+ function emitIdentifier ( node : Identifier , allowGeneratedIdentifiers : boolean ) {
2640+ if ( allowGeneratedIdentifiers ) {
2641+ let generatedName = getGeneratedNameForIdentifier ( node ) ;
2642+ if ( generatedName ) {
2643+ write ( generatedName ) ;
26372644 return ;
26382645 }
26392646 }
@@ -2686,7 +2693,7 @@ module ts {
26862693
26872694 function emitBindingElement ( node : BindingElement ) {
26882695 if ( node . propertyName ) {
2689- emit ( node . propertyName ) ;
2696+ emit ( node . propertyName , /*allowGeneratedIdentifiers*/ false ) ;
26902697 write ( ": " ) ;
26912698 }
26922699 if ( node . dotDotDotToken ) {
@@ -3030,21 +3037,21 @@ module ts {
30303037 }
30313038
30323039 function emitMethod ( node : MethodDeclaration ) {
3033- emit ( node . name ) ;
3040+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
30343041 if ( languageVersion < ScriptTarget . ES6 ) {
30353042 write ( ": function " ) ;
30363043 }
30373044 emitSignatureAndBody ( node ) ;
30383045 }
30393046
30403047 function emitPropertyAssignment ( node : PropertyDeclaration ) {
3041- emit ( node . name ) ;
3048+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
30423049 write ( ": " ) ;
30433050 emit ( node . initializer ) ;
30443051 }
30453052
30463053 function emitShorthandPropertyAssignment ( node : ShorthandPropertyAssignment ) {
3047- emit ( node . name ) ;
3054+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
30483055 // If short-hand property has a prefix, then regardless of the target version, we will emit it as normal property assignment. For example:
30493056 // module m {
30503057 // export let y;
@@ -3053,7 +3060,20 @@ module ts {
30533060 // export let obj = { y };
30543061 // }
30553062 // The short-hand property in obj need to emit as such ... = { y : m.y } regardless of the TargetScript version
3056- if ( languageVersion < ScriptTarget . ES6 || resolver . getExpressionNameSubstitution ( node . name ) ) {
3063+ if ( languageVersion < ScriptTarget . ES6 ) {
3064+ // Emit identifier as an identifier
3065+ write ( ": " ) ;
3066+ var generatedName = getGeneratedNameForIdentifier ( node . name ) ;
3067+ if ( generatedName ) {
3068+ write ( generatedName ) ;
3069+ }
3070+ else {
3071+ // Even though this is stored as identifier treat it as an expression
3072+ // Short-hand, { x }, is equivalent of normal form { x: x }
3073+ emitExpressionIdentifier ( node . name ) ;
3074+ }
3075+ }
3076+ else if ( resolver . getExpressionNameSubstitution ( node . name ) ) {
30573077 // Emit identifier as an identifier
30583078 write ( ": " ) ;
30593079 // Even though this is stored as identifier treat it as an expression
@@ -3106,7 +3126,7 @@ module ts {
31063126 let indentedBeforeDot = indentIfOnDifferentLines ( node , node . expression , node . dotToken ) ;
31073127 write ( "." ) ;
31083128 let indentedAfterDot = indentIfOnDifferentLines ( node , node . dotToken , node . name ) ;
3109- emit ( node . name ) ;
3129+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
31103130 decreaseIndentIf ( indentedBeforeDot , indentedAfterDot ) ;
31113131 }
31123132
@@ -3897,8 +3917,7 @@ module ts {
38973917 renameNonTopLevelLetAndConst ( name ) ;
38983918 if ( name . parent && ( name . parent . kind === SyntaxKind . VariableDeclaration || name . parent . kind === SyntaxKind . BindingElement ) ) {
38993919 emitModuleMemberName ( < Declaration > name . parent ) ;
3900- }
3901- else {
3920+ } else {
39023921 emit ( name ) ;
39033922 }
39043923 write ( " = " ) ;
@@ -4294,7 +4313,7 @@ module ts {
42944313
42954314 function emitAccessor ( node : AccessorDeclaration ) {
42964315 write ( node . kind === SyntaxKind . GetAccessor ? "get " : "set " ) ;
4297- emit ( node . name ) ;
4316+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
42984317 emitSignatureAndBody ( node ) ;
42994318 }
43004319
@@ -5340,7 +5359,7 @@ module ts {
53405359 emitLeadingComments ( node . endOfFileToken ) ;
53415360 }
53425361
5343- function emitNodeWithoutSourceMapWithComments ( node : Node ) : void {
5362+ function emitNodeWithoutSourceMapWithComments ( node : Node , allowGeneratedIdentifiers ?: boolean ) : void {
53445363 if ( ! node ) {
53455364 return ;
53465365 }
@@ -5354,14 +5373,14 @@ module ts {
53545373 emitLeadingComments ( node ) ;
53555374 }
53565375
5357- emitJavaScriptWorker ( node ) ;
5376+ emitJavaScriptWorker ( node , ( allowGeneratedIdentifiers === undefined ) || allowGeneratedIdentifiers ) ;
53585377
53595378 if ( emitComments ) {
53605379 emitTrailingComments ( node ) ;
53615380 }
53625381 }
53635382
5364- function emitNodeWithoutSourceMapWithoutComments ( node : Node ) : void {
5383+ function emitNodeWithoutSourceMapWithoutComments ( node : Node , allowGeneratedIdentifiers ?: boolean ) : void {
53655384 if ( ! node ) {
53665385 return ;
53675386 }
@@ -5370,7 +5389,7 @@ module ts {
53705389 return emitPinnedOrTripleSlashComments ( node ) ;
53715390 }
53725391
5373- emitJavaScriptWorker ( node ) ;
5392+ emitJavaScriptWorker ( node , ( allowGeneratedIdentifiers === undefined ) || allowGeneratedIdentifiers ) ;
53745393 }
53755394
53765395 function shouldEmitLeadingAndTrailingComments ( node : Node ) {
@@ -5400,11 +5419,11 @@ module ts {
54005419 return true ;
54015420 }
54025421
5403- function emitJavaScriptWorker ( node : Node ) {
5422+ function emitJavaScriptWorker ( node : Node , allowGeneratedIdentifiers : boolean ) {
54045423 // Check if the node can be emitted regardless of the ScriptTarget
54055424 switch ( node . kind ) {
54065425 case SyntaxKind . Identifier :
5407- return emitIdentifier ( < Identifier > node ) ;
5426+ return emitIdentifier ( < Identifier > node , allowGeneratedIdentifiers ) ;
54085427 case SyntaxKind . Parameter :
54095428 return emitParameter ( < ParameterDeclaration > node ) ;
54105429 case SyntaxKind . MethodDeclaration :
0 commit comments