@@ -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
@@ -3897,8 +3917,7 @@ module ts {
3897
3917
renameNonTopLevelLetAndConst ( name ) ;
3898
3918
if ( name . parent && ( name . parent . kind === SyntaxKind . VariableDeclaration || name . parent . kind === SyntaxKind . BindingElement ) ) {
3899
3919
emitModuleMemberName ( < Declaration > name . parent ) ;
3900
- }
3901
- else {
3920
+ } else {
3902
3921
emit ( name ) ;
3903
3922
}
3904
3923
write ( " = " ) ;
@@ -4294,7 +4313,7 @@ module ts {
4294
4313
4295
4314
function emitAccessor ( node : AccessorDeclaration ) {
4296
4315
write ( node . kind === SyntaxKind . GetAccessor ? "get " : "set " ) ;
4297
- emit ( node . name ) ;
4316
+ emit ( node . name , /*allowGeneratedIdentifiers*/ false ) ;
4298
4317
emitSignatureAndBody ( node ) ;
4299
4318
}
4300
4319
@@ -5340,7 +5359,7 @@ module ts {
5340
5359
emitLeadingComments ( node . endOfFileToken ) ;
5341
5360
}
5342
5361
5343
- function emitNodeWithoutSourceMapWithComments ( node : Node ) : void {
5362
+ function emitNodeWithoutSourceMapWithComments ( node : Node , allowGeneratedIdentifiers ?: boolean ) : void {
5344
5363
if ( ! node ) {
5345
5364
return ;
5346
5365
}
@@ -5354,14 +5373,14 @@ module ts {
5354
5373
emitLeadingComments ( node ) ;
5355
5374
}
5356
5375
5357
- emitJavaScriptWorker ( node ) ;
5376
+ emitJavaScriptWorker ( node , ( allowGeneratedIdentifiers === undefined ) || allowGeneratedIdentifiers ) ;
5358
5377
5359
5378
if ( emitComments ) {
5360
5379
emitTrailingComments ( node ) ;
5361
5380
}
5362
5381
}
5363
5382
5364
- function emitNodeWithoutSourceMapWithoutComments ( node : Node ) : void {
5383
+ function emitNodeWithoutSourceMapWithoutComments ( node : Node , allowGeneratedIdentifiers ?: boolean ) : void {
5365
5384
if ( ! node ) {
5366
5385
return ;
5367
5386
}
@@ -5370,7 +5389,7 @@ module ts {
5370
5389
return emitPinnedOrTripleSlashComments ( node ) ;
5371
5390
}
5372
5391
5373
- emitJavaScriptWorker ( node ) ;
5392
+ emitJavaScriptWorker ( node , ( allowGeneratedIdentifiers === undefined ) || allowGeneratedIdentifiers ) ;
5374
5393
}
5375
5394
5376
5395
function shouldEmitLeadingAndTrailingComments ( node : Node ) {
@@ -5400,11 +5419,11 @@ module ts {
5400
5419
return true ;
5401
5420
}
5402
5421
5403
- function emitJavaScriptWorker ( node : Node ) {
5422
+ function emitJavaScriptWorker ( node : Node , allowGeneratedIdentifiers : boolean ) {
5404
5423
// Check if the node can be emitted regardless of the ScriptTarget
5405
5424
switch ( node . kind ) {
5406
5425
case SyntaxKind . Identifier :
5407
- return emitIdentifier ( < Identifier > node ) ;
5426
+ return emitIdentifier ( < Identifier > node , allowGeneratedIdentifiers ) ;
5408
5427
case SyntaxKind . Parameter :
5409
5428
return emitParameter ( < ParameterDeclaration > node ) ;
5410
5429
case SyntaxKind . MethodDeclaration :
0 commit comments