@@ -946,7 +946,7 @@ namespace ts {
946
946
* @param node The node to visit.
947
947
*/
948
948
function visitArrayLiteralExpression ( node : ArrayLiteralExpression ) {
949
- return visitElements ( node . elements , node . multiLine ) ;
949
+ return visitElements ( node . elements , /*leadingElement*/ undefined , /*location*/ undefined , node . multiLine ) ;
950
950
}
951
951
952
952
/**
@@ -956,7 +956,7 @@ namespace ts {
956
956
* @param elements The elements to visit.
957
957
* @param multiLine Whether array literals created should be emitted on multiple lines.
958
958
*/
959
- function visitElements ( elements : NodeArray < Expression > , _multiLine ?: boolean ) {
959
+ function visitElements ( elements : NodeArray < Expression > , leadingElement ?: Expression , location ?: TextRange , multiLine ?: boolean ) {
960
960
// [source]
961
961
// ar = [1, yield, 2];
962
962
//
@@ -971,18 +971,22 @@ namespace ts {
971
971
const temp = declareLocal ( ) ;
972
972
let hasAssignedTemp = false ;
973
973
if ( numInitialElements > 0 ) {
974
+ const initialElements = visitNodes ( elements , visitor , isExpression , 0 , numInitialElements ) ;
974
975
emitAssignment ( temp ,
975
976
createArrayLiteral (
976
- visitNodes ( elements , visitor , isExpression , 0 , numInitialElements )
977
+ leadingElement
978
+ ? [ leadingElement , ...initialElements ]
979
+ : initialElements
977
980
)
978
981
) ;
982
+ leadingElement = undefined ;
979
983
hasAssignedTemp = true ;
980
984
}
981
985
982
986
const expressions = reduceLeft ( elements , reduceElement , < Expression [ ] > [ ] , numInitialElements ) ;
983
987
return hasAssignedTemp
984
- ? createArrayConcat ( temp , [ createArrayLiteral ( expressions ) ] )
985
- : createArrayLiteral ( expressions ) ;
988
+ ? createArrayConcat ( temp , [ createArrayLiteral ( expressions , /*location*/ undefined , multiLine ) ] )
989
+ : createArrayLiteral ( leadingElement ? [ leadingElement , ... expressions ] : expressions , location , multiLine ) ;
986
990
987
991
function reduceElement ( expressions : Expression [ ] , element : Expression ) {
988
992
if ( containsYield ( element ) && expressions . length > 0 ) {
@@ -991,11 +995,16 @@ namespace ts {
991
995
hasAssignedTemp
992
996
? createArrayConcat (
993
997
temp ,
994
- [ createArrayLiteral ( expressions ) ]
998
+ [ createArrayLiteral ( expressions , /*location*/ undefined , multiLine ) ]
999
+ )
1000
+ : createArrayLiteral (
1001
+ leadingElement ? [ leadingElement , ...expressions ] : expressions ,
1002
+ /*location*/ undefined ,
1003
+ multiLine
995
1004
)
996
- : createArrayLiteral ( expressions )
997
1005
) ;
998
1006
hasAssignedTemp = true ;
1007
+ leadingElement = undefined ;
999
1008
expressions = [ ] ;
1000
1009
}
1001
1010
@@ -1131,7 +1140,10 @@ namespace ts {
1131
1140
createFunctionApply (
1132
1141
cacheExpression ( visitNode ( target , visitor , isExpression ) ) ,
1133
1142
thisArg ,
1134
- visitElements ( node . arguments )
1143
+ visitElements (
1144
+ node . arguments ,
1145
+ /*leadingElement*/ createVoidZero ( )
1146
+ )
1135
1147
) ,
1136
1148
/*typeArguments*/ undefined ,
1137
1149
[ ] ,
0 commit comments