@@ -2074,19 +2074,19 @@ module ts {
2074
2074
sourceMapDir = getDirectoryPath ( normalizePath ( jsFilePath ) ) ;
2075
2075
}
2076
2076
2077
- function emitNodeWithSourceMap ( node : Node ) {
2077
+ function emitNodeWithSourceMap ( node : Node , allowGeneratedIdentifiers ?: boolean ) {
2078
2078
if ( node ) {
2079
2079
if ( nodeIsSynthesized ( node ) ) {
2080
- return emitNodeWithoutSourceMap ( node ) ;
2080
+ return emitNodeWithoutSourceMap ( node , /*allowGeneratedIdentifiers*/ false ) ;
2081
2081
}
2082
2082
if ( node . kind != SyntaxKind . SourceFile ) {
2083
2083
recordEmitNodeStartSpan ( node ) ;
2084
- emitNodeWithoutSourceMap ( node ) ;
2084
+ emitNodeWithoutSourceMap ( node , allowGeneratedIdentifiers ) ;
2085
2085
recordEmitNodeEndSpan ( node ) ;
2086
2086
}
2087
2087
else {
2088
2088
recordNewSourceFileStart ( < SourceFile > node ) ;
2089
- emitNodeWithoutSourceMap ( node ) ;
2089
+ emitNodeWithoutSourceMap ( node , /*allowGeneratedIdentifiers*/ false ) ;
2090
2090
}
2091
2091
}
2092
2092
}
@@ -2623,17 +2623,24 @@ module ts {
2623
2623
}
2624
2624
}
2625
2625
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 ] ;
2629
2637
}
2630
2638
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 ) ;
2637
2644
return ;
2638
2645
}
2639
2646
}
@@ -2686,7 +2693,7 @@ module ts {
2686
2693
2687
2694
function emitBindingElement ( node : BindingElement ) {
2688
2695
if ( node . propertyName ) {
2689
- emit ( node . propertyName ) ;
2696
+ emit ( node . propertyName , /*allowGeneratedIdentifiers*/ false ) ;
2690
2697
write ( ": " ) ;
2691
2698
}
2692
2699
if ( node . dotDotDotToken ) {
@@ -3030,21 +3037,21 @@ module ts {
3030
3037
}
3031
3038
3032
3039
function emitMethod ( node : MethodDeclaration ) {
3033
- emit ( node . name ) ;
3040
+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
3034
3041
if ( languageVersion < ScriptTarget . ES6 ) {
3035
3042
write ( ": function " ) ;
3036
3043
}
3037
3044
emitSignatureAndBody ( node ) ;
3038
3045
}
3039
3046
3040
3047
function emitPropertyAssignment ( node : PropertyDeclaration ) {
3041
- emit ( node . name ) ;
3048
+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
3042
3049
write ( ": " ) ;
3043
3050
emit ( node . initializer ) ;
3044
3051
}
3045
3052
3046
3053
function emitShorthandPropertyAssignment ( node : ShorthandPropertyAssignment ) {
3047
- emit ( node . name ) ;
3054
+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
3048
3055
// If short-hand property has a prefix, then regardless of the target version, we will emit it as normal property assignment. For example:
3049
3056
// module m {
3050
3057
// export let y;
@@ -3053,7 +3060,20 @@ module ts {
3053
3060
// export let obj = { y };
3054
3061
// }
3055
3062
// 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 ) ) {
3057
3077
// Emit identifier as an identifier
3058
3078
write ( ": " ) ;
3059
3079
// Even though this is stored as identifier treat it as an expression
@@ -3106,7 +3126,7 @@ module ts {
3106
3126
let indentedBeforeDot = indentIfOnDifferentLines ( node , node . expression , node . dotToken ) ;
3107
3127
write ( "." ) ;
3108
3128
let indentedAfterDot = indentIfOnDifferentLines ( node , node . dotToken , node . name ) ;
3109
- emit ( node . name ) ;
3129
+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
3110
3130
decreaseIndentIf ( indentedBeforeDot , indentedAfterDot ) ;
3111
3131
}
3112
3132
@@ -4294,7 +4314,7 @@ module ts {
4294
4314
4295
4315
function emitAccessor ( node : AccessorDeclaration ) {
4296
4316
write ( node . kind === SyntaxKind . GetAccessor ? "get " : "set " ) ;
4297
- emit ( node . name ) ;
4317
+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
4298
4318
emitSignatureAndBody ( node ) ;
4299
4319
}
4300
4320
@@ -5340,7 +5360,7 @@ module ts {
5340
5360
emitLeadingComments ( node . endOfFileToken ) ;
5341
5361
}
5342
5362
5343
- function emitNodeWithoutSourceMapWithComments ( node : Node ) : void {
5363
+ function emitNodeWithoutSourceMapWithComments ( node : Node , allowGeneratedIdentifiers ?: boolean ) : void {
5344
5364
if ( ! node ) {
5345
5365
return ;
5346
5366
}
@@ -5354,14 +5374,14 @@ module ts {
5354
5374
emitLeadingComments ( node ) ;
5355
5375
}
5356
5376
5357
- emitJavaScriptWorker ( node ) ;
5377
+ emitJavaScriptWorker ( node , allowGeneratedIdentifiers ) ;
5358
5378
5359
5379
if ( emitComments ) {
5360
5380
emitTrailingComments ( node ) ;
5361
5381
}
5362
5382
}
5363
5383
5364
- function emitNodeWithoutSourceMapWithoutComments ( node : Node ) : void {
5384
+ function emitNodeWithoutSourceMapWithoutComments ( node : Node , allowGeneratedIdentifiers ?: boolean ) : void {
5365
5385
if ( ! node ) {
5366
5386
return ;
5367
5387
}
@@ -5370,7 +5390,7 @@ module ts {
5370
5390
return emitPinnedOrTripleSlashComments ( node ) ;
5371
5391
}
5372
5392
5373
- emitJavaScriptWorker ( node ) ;
5393
+ emitJavaScriptWorker ( node , allowGeneratedIdentifiers ) ;
5374
5394
}
5375
5395
5376
5396
function shouldEmitLeadingAndTrailingComments ( node : Node ) {
@@ -5400,11 +5420,11 @@ module ts {
5400
5420
return true ;
5401
5421
}
5402
5422
5403
- function emitJavaScriptWorker ( node : Node ) {
5423
+ function emitJavaScriptWorker ( node : Node , allowGeneratedIdentifiers : boolean = true ) {
5404
5424
// Check if the node can be emitted regardless of the ScriptTarget
5405
5425
switch ( node . kind ) {
5406
5426
case SyntaxKind . Identifier :
5407
- return emitIdentifier ( < Identifier > node ) ;
5427
+ return emitIdentifier ( < Identifier > node , allowGeneratedIdentifiers ) ;
5408
5428
case SyntaxKind . Parameter :
5409
5429
return emitParameter ( < ParameterDeclaration > node ) ;
5410
5430
case SyntaxKind . MethodDeclaration :
0 commit comments