Skip to content

Commit 30f9a5c

Browse files
Do not pass context flags downward while parsing binding elements.
This prevents an unnecessary allocation, simplifies parsing code, and prevents an issue where parsing depends on context flags not stored in the final tree. This is an issue for incremental parsing that can lead to nodes being reused inappropriately.
1 parent 539300b commit 30f9a5c

1 file changed

Lines changed: 20 additions & 19 deletions

File tree

src/compiler/parser.ts

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3277,46 +3277,47 @@ module ts {
32773277

32783278
// DECLARATIONS
32793279

3280-
function parseBindingElement(context: ParsingContext): BindingElement {
3281-
if (context === ParsingContext.ArrayBindingElements && token === SyntaxKind.CommaToken) {
3280+
function parseArrayBindingElement(): BindingElement {
3281+
if (token === SyntaxKind.CommaToken) {
32823282
return <BindingElement>createNode(SyntaxKind.OmittedExpression);
32833283
}
3284+
32843285
var node = <BindingElement>createNode(SyntaxKind.BindingElement);
3285-
if (context === ParsingContext.ObjectBindingElements) {
3286-
// TODO(andersh): Handle computed properties
3287-
var id = parsePropertyName();
3288-
if (id.kind === SyntaxKind.Identifier && token !== SyntaxKind.ColonToken) {
3289-
node.name = <Identifier>id;
3290-
}
3291-
else {
3292-
parseExpected(SyntaxKind.ColonToken);
3293-
node.propertyName = <Identifier>id;
3294-
node.name = parseIdentifierOrPattern();
3295-
}
3286+
node.name = parseIdentifierOrPattern();
3287+
node.initializer = parseInitializer(/*inParameter*/ false);
3288+
return finishNode(node);
3289+
}
3290+
3291+
function parseObjectBindingElement(): BindingElement {
3292+
var node = <BindingElement>createNode(SyntaxKind.BindingElement);
3293+
3294+
// TODO(andersh): Handle computed properties
3295+
var id = parsePropertyName();
3296+
if (id.kind === SyntaxKind.Identifier && token !== SyntaxKind.ColonToken) {
3297+
node.name = <Identifier>id;
32963298
}
32973299
else {
3300+
parseExpected(SyntaxKind.ColonToken);
3301+
node.propertyName = <Identifier>id;
32983302
node.name = parseIdentifierOrPattern();
32993303
}
3304+
33003305
node.initializer = parseInitializer(/*inParameter*/ false);
33013306
return finishNode(node);
33023307
}
33033308

3304-
function parseBindingList(context: ParsingContext): NodeArray<BindingElement> {
3305-
return parseDelimitedList(context, () => parseBindingElement(context));
3306-
}
3307-
33083309
function parseObjectBindingPattern(): BindingPattern {
33093310
var node = <BindingPattern>createNode(SyntaxKind.ObjectBindingPattern);
33103311
parseExpected(SyntaxKind.OpenBraceToken);
3311-
node.elements = parseBindingList(ParsingContext.ObjectBindingElements);
3312+
node.elements = parseDelimitedList(ParsingContext.ObjectBindingElements, parseObjectBindingElement);
33123313
parseExpected(SyntaxKind.CloseBraceToken);
33133314
return finishNode(node);
33143315
}
33153316

33163317
function parseArrayBindingPattern(): BindingPattern {
33173318
var node = <BindingPattern>createNode(SyntaxKind.ArrayBindingPattern);
33183319
parseExpected(SyntaxKind.OpenBracketToken);
3319-
node.elements = parseBindingList(ParsingContext.ArrayBindingElements);
3320+
node.elements = parseDelimitedList(ParsingContext.ArrayBindingElements, parseArrayBindingElement);
33203321
parseExpected(SyntaxKind.CloseBracketToken);
33213322
return finishNode(node);
33223323
}

0 commit comments

Comments
 (0)