diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index ea5b35cbce1..582924df04b 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3277,38 +3277,39 @@ module ts { // DECLARATIONS - function parseBindingElement(context: ParsingContext): BindingElement { - if (context === ParsingContext.ArrayBindingElements && token === SyntaxKind.CommaToken) { + function parseArrayBindingElement(): BindingElement { + if (token === SyntaxKind.CommaToken) { return createNode(SyntaxKind.OmittedExpression); } + var node = createNode(SyntaxKind.BindingElement); - if (context === ParsingContext.ObjectBindingElements) { - // TODO(andersh): Handle computed properties - var id = parsePropertyName(); - if (id.kind === SyntaxKind.Identifier && token !== SyntaxKind.ColonToken) { - node.name = id; - } - else { - parseExpected(SyntaxKind.ColonToken); - node.propertyName = id; - node.name = parseIdentifierOrPattern(); - } - } - else { - node.name = parseIdentifierOrPattern(); - } + node.name = parseIdentifierOrPattern(); node.initializer = parseInitializer(/*inParameter*/ false); return finishNode(node); } - function parseBindingList(context: ParsingContext): NodeArray { - return parseDelimitedList(context, () => parseBindingElement(context)); + function parseObjectBindingElement(): BindingElement { + var node = createNode(SyntaxKind.BindingElement); + + // TODO(andersh): Handle computed properties + var id = parsePropertyName(); + if (id.kind === SyntaxKind.Identifier && token !== SyntaxKind.ColonToken) { + node.name = id; + } + else { + parseExpected(SyntaxKind.ColonToken); + node.propertyName = id; + node.name = parseIdentifierOrPattern(); + } + + node.initializer = parseInitializer(/*inParameter*/ false); + return finishNode(node); } function parseObjectBindingPattern(): BindingPattern { var node = createNode(SyntaxKind.ObjectBindingPattern); parseExpected(SyntaxKind.OpenBraceToken); - node.elements = parseBindingList(ParsingContext.ObjectBindingElements); + node.elements = parseDelimitedList(ParsingContext.ObjectBindingElements, parseObjectBindingElement); parseExpected(SyntaxKind.CloseBraceToken); return finishNode(node); } @@ -3316,7 +3317,7 @@ module ts { function parseArrayBindingPattern(): BindingPattern { var node = createNode(SyntaxKind.ArrayBindingPattern); parseExpected(SyntaxKind.OpenBracketToken); - node.elements = parseBindingList(ParsingContext.ArrayBindingElements); + node.elements = parseDelimitedList(ParsingContext.ArrayBindingElements, parseArrayBindingElement); parseExpected(SyntaxKind.CloseBracketToken); return finishNode(node); }