@@ -626,12 +626,6 @@ module ts {
626
626
Parameters , // Parameters in parameter list
627
627
}
628
628
629
- enum TrailingCommaBehavior {
630
- Disallow ,
631
- Allow ,
632
- Preserve
633
- }
634
-
635
629
// Tracks whether we nested (directly or indirectly) in a certain control block.
636
630
// Used for validating break and continue statements.
637
631
enum ControlBlockContext {
@@ -1203,7 +1197,7 @@ module ts {
1203
1197
}
1204
1198
1205
1199
// Parses a comma-delimited list of elements
1206
- function parseDelimitedList < T extends Node > ( kind : ParsingContext , parseElement : ( ) => T , trailingCommaBehavior : TrailingCommaBehavior ) : NodeArray < T > {
1200
+ function parseDelimitedList < T extends Node > ( kind : ParsingContext , parseElement : ( ) => T , allowTrailingComma : boolean , preserveTrailingComma : boolean ) : NodeArray < T > {
1207
1201
var saveParsingContext = parsingContext ;
1208
1202
parsingContext |= 1 << kind ;
1209
1203
var result = < NodeArray < T > > [ ] ;
@@ -1228,13 +1222,13 @@ module ts {
1228
1222
else if ( isListTerminator ( kind ) ) {
1229
1223
// Check if the last token was a comma.
1230
1224
if ( commaStart >= 0 ) {
1231
- if ( trailingCommaBehavior === TrailingCommaBehavior . Disallow ) {
1225
+ if ( ! allowTrailingComma ) {
1232
1226
if ( file . syntacticErrors . length === errorCountBeforeParsingList ) {
1233
1227
// Report a grammar error so we don't affect lookahead
1234
1228
grammarErrorAtPos ( commaStart , scanner . getStartPos ( ) - commaStart , Diagnostics . Trailing_comma_not_allowed ) ;
1235
1229
}
1236
1230
}
1237
- else if ( trailingCommaBehavior === TrailingCommaBehavior . Preserve ) {
1231
+ else if ( preserveTrailingComma ) {
1238
1232
result . push ( < T > createNode ( SyntaxKind . OmittedExpression ) ) ;
1239
1233
}
1240
1234
}
@@ -1271,7 +1265,7 @@ module ts {
1271
1265
1272
1266
function parseBracketedList < T extends Node > ( kind : ParsingContext , parseElement : ( ) => T , startToken : SyntaxKind , endToken : SyntaxKind ) : NodeArray < T > {
1273
1267
if ( parseExpected ( startToken ) ) {
1274
- var result = parseDelimitedList ( kind , parseElement , TrailingCommaBehavior . Disallow ) ;
1268
+ var result = parseDelimitedList ( kind , parseElement , /*allowTrailingComma*/ false , /*preserveTrailingComma*/ false ) ;
1275
1269
parseExpected ( endToken ) ;
1276
1270
return result ;
1277
1271
}
@@ -2307,7 +2301,8 @@ module ts {
2307
2301
else {
2308
2302
parseExpected ( SyntaxKind . OpenParenToken ) ;
2309
2303
}
2310
- callExpr . arguments = parseDelimitedList ( ParsingContext . ArgumentExpressions , parseAssignmentExpression , TrailingCommaBehavior . Disallow ) ;
2304
+ callExpr . arguments = parseDelimitedList ( ParsingContext . ArgumentExpressions ,
2305
+ parseAssignmentExpression , /*allowTrailingComma*/ false , /*preserveTrailingComma*/ false ) ;
2311
2306
parseExpected ( SyntaxKind . CloseParenToken ) ;
2312
2307
expr = finishNode ( callExpr ) ;
2313
2308
continue ;
@@ -2384,7 +2379,8 @@ module ts {
2384
2379
var node = < ArrayLiteral > createNode ( SyntaxKind . ArrayLiteral ) ;
2385
2380
parseExpected ( SyntaxKind . OpenBracketToken ) ;
2386
2381
if ( scanner . hasPrecedingLineBreak ( ) ) node . flags |= NodeFlags . MultiLine ;
2387
- node . elements = parseDelimitedList ( ParsingContext . ArrayLiteralMembers , parseArrayLiteralElement , TrailingCommaBehavior . Preserve ) ;
2382
+ node . elements = parseDelimitedList ( ParsingContext . ArrayLiteralMembers ,
2383
+ parseArrayLiteralElement , /*allowTrailingComma*/ true , /*preserveTrailingComma*/ true ) ;
2388
2384
parseExpected ( SyntaxKind . CloseBracketToken ) ;
2389
2385
return finishNode ( node ) ;
2390
2386
}
@@ -2427,9 +2423,9 @@ module ts {
2427
2423
}
2428
2424
2429
2425
// ES3 itself does not accept a trailing comma in an object literal, however, we'd like to preserve it in ES5.
2430
- var trailingCommaBehavior = languageVersion === ScriptTarget . ES3 ? TrailingCommaBehavior . Allow : TrailingCommaBehavior . Preserve ;
2426
+ var preserveTrailingComma = languageVersion !== ScriptTarget . ES3 ;
2431
2427
2432
- node . properties = parseDelimitedList ( ParsingContext . ObjectLiteralMembers , parseObjectLiteralMember , trailingCommaBehavior ) ;
2428
+ node . properties = parseDelimitedList ( ParsingContext . ObjectLiteralMembers , parseObjectLiteralMember , /*allowTrailingComma*/ true , preserveTrailingComma ) ;
2433
2429
parseExpected ( SyntaxKind . CloseBraceToken ) ;
2434
2430
2435
2431
var seen : Map < SymbolFlags > = { } ;
@@ -2518,7 +2514,8 @@ module ts {
2518
2514
parseExpected ( SyntaxKind . NewKeyword ) ;
2519
2515
node . func = parseCallAndAccess ( parsePrimaryExpression ( ) , /* inNewExpression */ true ) ;
2520
2516
if ( parseOptional ( SyntaxKind . OpenParenToken ) || token === SyntaxKind . LessThanToken && ( node . typeArguments = tryParse ( parseTypeArgumentsAndOpenParen ) ) ) {
2521
- node . arguments = parseDelimitedList ( ParsingContext . ArgumentExpressions , parseAssignmentExpression , TrailingCommaBehavior . Disallow ) ;
2517
+ node . arguments = parseDelimitedList ( ParsingContext . ArgumentExpressions ,
2518
+ parseAssignmentExpression , /*allowTrailingComma*/ false , /*preserveTrailingComma*/ false ) ;
2522
2519
parseExpected ( SyntaxKind . CloseParenToken ) ;
2523
2520
}
2524
2521
return finishNode ( node ) ;
@@ -3087,7 +3084,8 @@ module ts {
3087
3084
}
3088
3085
3089
3086
function parseVariableDeclarationList ( flags : NodeFlags , noIn ?: boolean ) : NodeArray < VariableDeclaration > {
3090
- return parseDelimitedList ( ParsingContext . VariableDeclarations , ( ) => parseVariableDeclaration ( flags , noIn ) , TrailingCommaBehavior . Disallow ) ;
3087
+ return parseDelimitedList ( ParsingContext . VariableDeclarations ,
3088
+ ( ) => parseVariableDeclaration ( flags , noIn ) , /*allowTrailingComma*/ false , /*preserveTrailingComma*/ false ) ;
3091
3089
}
3092
3090
3093
3091
function parseVariableStatement ( pos ?: number , flags ?: NodeFlags ) : VariableStatement {
@@ -3486,7 +3484,8 @@ module ts {
3486
3484
var implementsKeywordLength : number ;
3487
3485
if ( parseOptional ( SyntaxKind . ImplementsKeyword ) ) {
3488
3486
implementsKeywordLength = scanner . getStartPos ( ) - implementsKeywordStart ;
3489
- node . implementedTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences , parseTypeReference , TrailingCommaBehavior . Disallow ) ;
3487
+ node . implementedTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences ,
3488
+ parseTypeReference , /*allowTrailingComma*/ false , /*preserveTrailingComma*/ false ) ;
3490
3489
}
3491
3490
var errorCountBeforeClassBody = file . syntacticErrors . length ;
3492
3491
if ( parseExpected ( SyntaxKind . OpenBraceToken ) ) {
@@ -3514,7 +3513,8 @@ module ts {
3514
3513
var extendsKeywordLength : number ;
3515
3514
if ( parseOptional ( SyntaxKind . ExtendsKeyword ) ) {
3516
3515
extendsKeywordLength = scanner . getStartPos ( ) - extendsKeywordStart ;
3517
- node . baseTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences , parseTypeReference , TrailingCommaBehavior . Disallow ) ;
3516
+ node . baseTypes = parseDelimitedList ( ParsingContext . BaseTypeReferences ,
3517
+ parseTypeReference , /*allowTrailingComma*/ false , /*preserveTrailingComma*/ false ) ;
3518
3518
}
3519
3519
var errorCountBeforeInterfaceBody = file . syntacticErrors . length ;
3520
3520
node . members = parseTypeLiteral ( ) . members ;
@@ -3578,7 +3578,8 @@ module ts {
3578
3578
parseExpected ( SyntaxKind . EnumKeyword ) ;
3579
3579
node . name = parseIdentifier ( ) ;
3580
3580
if ( parseExpected ( SyntaxKind . OpenBraceToken ) ) {
3581
- node . members = parseDelimitedList ( ParsingContext . EnumMembers , parseAndCheckEnumMember , TrailingCommaBehavior . Allow ) ;
3581
+ node . members = parseDelimitedList ( ParsingContext . EnumMembers ,
3582
+ parseAndCheckEnumMember , /*allowTrailingComma*/ true , /*preserveTrailingComma*/ false ) ;
3582
3583
parseExpected ( SyntaxKind . CloseBraceToken ) ;
3583
3584
}
3584
3585
else {
0 commit comments