Accept object literal commas in ES3, preserve in ES5.

This commit is contained in:
Daniel Rosenwasser 2014-07-29 16:25:10 -07:00
parent fe4c738b01
commit c5349dc95f
5 changed files with 85 additions and 3 deletions

View File

@ -2106,14 +2106,20 @@ module ts {
function parseObjectLiteral(): ObjectLiteral {
var node = <ObjectLiteral>createNode(SyntaxKind.ObjectLiteral);
parseExpected(SyntaxKind.OpenBraceToken);
if (scanner.hasPrecedingLineBreak()) node.flags |= NodeFlags.MultiLine;
node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember, TrailingCommaBehavior.Allow);
if (scanner.hasPrecedingLineBreak()) {
node.flags |= NodeFlags.MultiLine;
}
// ES3 itself does not accept a trailing comma in an object literal, however, we'd like to preserve it in ES5.
var trailingCommaBehavior = languageVersion === ScriptTarget.ES3 ? TrailingCommaBehavior.Allow : TrailingCommaBehavior.Preserve;
node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember, trailingCommaBehavior);
parseExpected(SyntaxKind.CloseBraceToken);
var seen: Map<SymbolFlags> = {};
var Property = 1;
var GetAccessor = 2;
var SetAccesor = 4;
var SetAccesor = 4;
var GetOrSetAccessor = GetAccessor | SetAccesor;
forEach(node.properties, (p: Declaration) => {
if (p.kind === SyntaxKind.OmittedExpression) {

View File

@ -0,0 +1,25 @@
//// [trailingCommasES3.ts]
var o1 = { a: 1, b: 2 };
var o2 = { a: 1, b: 2, };
var o3 = { a: 1, };
var o4 = {};
var a1 = [1, 2];
var a2 = [1, 2, ];
var a3 = [1, ];
var a4 = [];
var a5 = [1, , ];
var a6 = [, , ];
//// [trailingCommasES3.js]
var o1 = { a: 1, b: 2 };
var o2 = { a: 1, b: 2 };
var o3 = { a: 1 };
var o4 = {};
var a1 = [1, 2];
var a2 = [1, 2, ];
var a3 = [1, ];
var a4 = [];
var a5 = [1, , ];
var a6 = [, , ];

View File

@ -0,0 +1,25 @@
//// [trailingCommasES5.ts]
var o1 = { a: 1, b: 2 };
var o2 = { a: 1, b: 2, };
var o3 = { a: 1, };
var o4 = {};
var a1 = [1, 2];
var a2 = [1, 2, ];
var a3 = [1, ];
var a4 = [];
var a5 = [1, , ];
var a6 = [, , ];
//// [trailingCommasES5.js]
var o1 = { a: 1, b: 2 };
var o2 = { a: 1, b: 2, };
var o3 = { a: 1, };
var o4 = {};
var a1 = [1, 2];
var a2 = [1, 2, ];
var a3 = [1, ];
var a4 = [];
var a5 = [1, , ];
var a6 = [, , ];

View File

@ -0,0 +1,13 @@
// @target: es3
var o1 = { a: 1, b: 2 };
var o2 = { a: 1, b: 2, };
var o3 = { a: 1, };
var o4 = {};
var a1 = [1, 2];
var a2 = [1, 2, ];
var a3 = [1, ];
var a4 = [];
var a5 = [1, , ];
var a6 = [, , ];

View File

@ -0,0 +1,13 @@
// @target: es5
var o1 = { a: 1, b: 2 };
var o2 = { a: 1, b: 2, };
var o3 = { a: 1, };
var o4 = {};
var a1 = [1, 2];
var a2 = [1, 2, ];
var a3 = [1, ];
var a4 = [];
var a5 = [1, , ];
var a6 = [, , ];