@@ -227,7 +227,7 @@ namespace ts {
227
227
228
228
export function transformGenerators ( context : TransformationContext ) {
229
229
const {
230
- startLexicalEnvironment ,
230
+ resumeLexicalEnvironment ,
231
231
endLexicalEnvironment,
232
232
hoistFunctionDeclaration,
233
233
hoistVariableDeclaration,
@@ -450,11 +450,11 @@ namespace ts {
450
450
node = setOriginalNode (
451
451
createFunctionDeclaration (
452
452
/*decorators*/ undefined ,
453
- /* modifiers*/ undefined ,
453
+ node . modifiers ,
454
454
/*asteriskToken*/ undefined ,
455
455
node . name ,
456
456
/*typeParameters*/ undefined ,
457
- node . parameters ,
457
+ visitParameterList ( node . parameters , visitor , context ) ,
458
458
/*type*/ undefined ,
459
459
transformGeneratorFunctionBody ( node . body ) ,
460
460
/*location*/ node
@@ -501,7 +501,7 @@ namespace ts {
501
501
/*asteriskToken*/ undefined ,
502
502
node . name ,
503
503
/*typeParameters*/ undefined ,
504
- node . parameters ,
504
+ visitParameterList ( node . parameters , visitor , context ) ,
505
505
/*type*/ undefined ,
506
506
transformGeneratorFunctionBody ( node . body ) ,
507
507
/*location*/ node
@@ -579,7 +579,7 @@ namespace ts {
579
579
state = createTempVariable ( /*recordTempVariable*/ undefined ) ;
580
580
581
581
// Build the generator
582
- startLexicalEnvironment ( ) ;
582
+ resumeLexicalEnvironment ( ) ;
583
583
584
584
const statementOffset = addPrologueDirectives ( statements , body . statements , /*ensureUseStrict*/ false , visitor ) ;
585
585
@@ -947,7 +947,7 @@ namespace ts {
947
947
* @param node The node to visit.
948
948
*/
949
949
function visitArrayLiteralExpression ( node : ArrayLiteralExpression ) {
950
- return visitElements ( node . elements , node . multiLine ) ;
950
+ return visitElements ( node . elements , /*leadingElement*/ undefined , /*location*/ undefined , node . multiLine ) ;
951
951
}
952
952
953
953
/**
@@ -957,7 +957,7 @@ namespace ts {
957
957
* @param elements The elements to visit.
958
958
* @param multiLine Whether array literals created should be emitted on multiple lines.
959
959
*/
960
- function visitElements ( elements : NodeArray < Expression > , _multiLine ?: boolean ) {
960
+ function visitElements ( elements : NodeArray < Expression > , leadingElement ?: Expression , location ?: TextRange , multiLine ?: boolean ) {
961
961
// [source]
962
962
// ar = [1, yield, 2];
963
963
//
@@ -972,18 +972,22 @@ namespace ts {
972
972
const temp = declareLocal ( ) ;
973
973
let hasAssignedTemp = false ;
974
974
if ( numInitialElements > 0 ) {
975
+ const initialElements = visitNodes ( elements , visitor , isExpression , 0 , numInitialElements ) ;
975
976
emitAssignment ( temp ,
976
977
createArrayLiteral (
977
- visitNodes ( elements , visitor , isExpression , 0 , numInitialElements )
978
+ leadingElement
979
+ ? [ leadingElement , ...initialElements ]
980
+ : initialElements
978
981
)
979
982
) ;
983
+ leadingElement = undefined ;
980
984
hasAssignedTemp = true ;
981
985
}
982
986
983
987
const expressions = reduceLeft ( elements , reduceElement , < Expression [ ] > [ ] , numInitialElements ) ;
984
988
return hasAssignedTemp
985
- ? createArrayConcat ( temp , [ createArrayLiteral ( expressions ) ] )
986
- : createArrayLiteral ( expressions ) ;
989
+ ? createArrayConcat ( temp , [ createArrayLiteral ( expressions , /*location*/ undefined , multiLine ) ] )
990
+ : createArrayLiteral ( leadingElement ? [ leadingElement , ... expressions ] : expressions , location , multiLine ) ;
987
991
988
992
function reduceElement ( expressions : Expression [ ] , element : Expression ) {
989
993
if ( containsYield ( element ) && expressions . length > 0 ) {
@@ -992,11 +996,16 @@ namespace ts {
992
996
hasAssignedTemp
993
997
? createArrayConcat (
994
998
temp ,
995
- [ createArrayLiteral ( expressions ) ]
999
+ [ createArrayLiteral ( expressions , /*location*/ undefined , multiLine ) ]
1000
+ )
1001
+ : createArrayLiteral (
1002
+ leadingElement ? [ leadingElement , ...expressions ] : expressions ,
1003
+ /*location*/ undefined ,
1004
+ multiLine
996
1005
)
997
- : createArrayLiteral ( expressions )
998
1006
) ;
999
1007
hasAssignedTemp = true ;
1008
+ leadingElement = undefined ;
1000
1009
expressions = [ ] ;
1001
1010
}
1002
1011
@@ -1132,7 +1141,10 @@ namespace ts {
1132
1141
createFunctionApply (
1133
1142
cacheExpression ( visitNode ( target , visitor , isExpression ) ) ,
1134
1143
thisArg ,
1135
- visitElements ( node . arguments )
1144
+ visitElements (
1145
+ node . arguments ,
1146
+ /*leadingElement*/ createVoidZero ( )
1147
+ )
1136
1148
) ,
1137
1149
/*typeArguments*/ undefined ,
1138
1150
[ ] ,
0 commit comments