@@ -1555,7 +1555,10 @@ namespace ts {
1555
1555
return false ;
1556
1556
}
1557
1557
1558
- function parseExpectedMatchingBrackets ( openKind : SyntaxKind , closeKind : SyntaxKind , openPosition : number ) {
1558
+ function parseExpectedMatchingBrackets ( openKind : SyntaxKind , closeKind : SyntaxKind , openParsed : boolean , openPosition : number ) {
1559
+ if ( ! openParsed ) {
1560
+ return parseExpected ( closeKind ) ;
1561
+ }
1559
1562
if ( token ( ) === closeKind ) {
1560
1563
nextToken ( ) ;
1561
1564
return ;
@@ -5499,10 +5502,10 @@ namespace ts {
5499
5502
function parseArrayLiteralExpression ( ) : ArrayLiteralExpression {
5500
5503
const pos = getNodePos ( ) ;
5501
5504
const openBracketPosition = scanner . getTokenPos ( ) ;
5502
- parseExpected ( SyntaxKind . OpenBracketToken ) ;
5505
+ const openBracketParsed = parseExpected ( SyntaxKind . OpenBracketToken ) ;
5503
5506
const multiLine = scanner . hasPrecedingLineBreak ( ) ;
5504
5507
const elements = parseDelimitedList ( ParsingContext . ArrayLiteralMembers , parseArgumentOrArrayLiteralElement ) ;
5505
- parseExpectedMatchingBrackets ( SyntaxKind . OpenBracketToken , SyntaxKind . CloseBracketToken , openBracketPosition ) ;
5508
+ parseExpectedMatchingBrackets ( SyntaxKind . OpenBracketToken , SyntaxKind . CloseBracketToken , openBracketParsed , openBracketPosition ) ;
5506
5509
return finishNode ( factory . createArrayLiteralExpression ( elements , multiLine ) , pos ) ;
5507
5510
}
5508
5511
@@ -5568,10 +5571,10 @@ namespace ts {
5568
5571
function parseObjectLiteralExpression ( ) : ObjectLiteralExpression {
5569
5572
const pos = getNodePos ( ) ;
5570
5573
const openBracePosition = scanner . getTokenPos ( ) ;
5571
- parseExpected ( SyntaxKind . OpenBraceToken ) ;
5574
+ const openBraceParsed = parseExpected ( SyntaxKind . OpenBraceToken ) ;
5572
5575
const multiLine = scanner . hasPrecedingLineBreak ( ) ;
5573
5576
const properties = parseDelimitedList ( ParsingContext . ObjectLiteralMembers , parseObjectLiteralElement , /*considerSemicolonAsDelimiter*/ true ) ;
5574
- parseExpectedMatchingBrackets ( SyntaxKind . OpenBraceToken , SyntaxKind . CloseBraceToken , openBracePosition ) ;
5577
+ parseExpectedMatchingBrackets ( SyntaxKind . OpenBraceToken , SyntaxKind . CloseBraceToken , openBraceParsed , openBracePosition ) ;
5575
5578
return finishNode ( factory . createObjectLiteralExpression ( properties , multiLine ) , pos ) ;
5576
5579
}
5577
5580
@@ -5654,10 +5657,11 @@ namespace ts {
5654
5657
const pos = getNodePos ( ) ;
5655
5658
const hasJSDoc = hasPrecedingJSDocComment ( ) ;
5656
5659
const openBracePosition = scanner . getTokenPos ( ) ;
5657
- if ( parseExpected ( SyntaxKind . OpenBraceToken , diagnosticMessage ) || ignoreMissingOpenBrace ) {
5660
+ const openBraceParsed = parseExpected ( SyntaxKind . OpenBraceToken , diagnosticMessage )
5661
+ if ( openBraceParsed || ignoreMissingOpenBrace ) {
5658
5662
const multiLine = scanner . hasPrecedingLineBreak ( ) ;
5659
5663
const statements = parseList ( ParsingContext . BlockStatements , parseStatement ) ;
5660
- parseExpectedMatchingBrackets ( SyntaxKind . OpenBraceToken , SyntaxKind . CloseBraceToken , openBracePosition ) ;
5664
+ parseExpectedMatchingBrackets ( SyntaxKind . OpenBraceToken , SyntaxKind . CloseBraceToken , openBraceParsed , openBracePosition ) ;
5661
5665
const result = withJSDoc ( finishNode ( factory . createBlock ( statements , multiLine ) , pos ) , hasJSDoc ) ;
5662
5666
if ( token ( ) === SyntaxKind . EqualsToken ) {
5663
5667
parseErrorAtCurrentToken ( Diagnostics . Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses ) ;
@@ -5714,9 +5718,9 @@ namespace ts {
5714
5718
const hasJSDoc = hasPrecedingJSDocComment ( ) ;
5715
5719
parseExpected ( SyntaxKind . IfKeyword ) ;
5716
5720
const openParenPosition = scanner . getTokenPos ( ) ;
5717
- parseExpected ( SyntaxKind . OpenParenToken ) ;
5721
+ const openParenParsed = parseExpected ( SyntaxKind . OpenParenToken ) ;
5718
5722
const expression = allowInAnd ( parseExpression ) ;
5719
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5723
+ parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenParsed , openParenPosition )
5720
5724
const thenStatement = parseStatement ( ) ;
5721
5725
const elseStatement = parseOptional ( SyntaxKind . ElseKeyword ) ? parseStatement ( ) : undefined ;
5722
5726
return withJSDoc ( finishNode ( factory . createIfStatement ( expression , thenStatement , elseStatement ) , pos ) , hasJSDoc ) ;
@@ -5729,9 +5733,9 @@ namespace ts {
5729
5733
const statement = parseStatement ( ) ;
5730
5734
parseExpected ( SyntaxKind . WhileKeyword ) ;
5731
5735
const openParenPosition = scanner . getTokenPos ( ) ;
5732
- parseExpected ( SyntaxKind . OpenParenToken ) ;
5736
+ const openParenParsed = parseExpected ( SyntaxKind . OpenParenToken ) ;
5733
5737
const expression = allowInAnd ( parseExpression ) ;
5734
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5738
+ parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenParsed , openParenPosition )
5735
5739
5736
5740
// From: https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html
5737
5741
// 157 min --- All allen at wirfs-brock.com CONF --- "do{;}while(false)false" prohibited in
@@ -5746,9 +5750,9 @@ namespace ts {
5746
5750
const hasJSDoc = hasPrecedingJSDocComment ( ) ;
5747
5751
parseExpected ( SyntaxKind . WhileKeyword ) ;
5748
5752
const openParenPosition = scanner . getTokenPos ( ) ;
5749
- parseExpected ( SyntaxKind . OpenParenToken ) ;
5753
+ const openParenParsed = parseExpected ( SyntaxKind . OpenParenToken ) ;
5750
5754
const expression = allowInAnd ( parseExpression ) ;
5751
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5755
+ parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenParsed , openParenPosition ) ;
5752
5756
const statement = parseStatement ( ) ;
5753
5757
return withJSDoc ( finishNode ( factory . createWhileStatement ( expression , statement ) , pos ) , hasJSDoc ) ;
5754
5758
}
@@ -5825,9 +5829,9 @@ namespace ts {
5825
5829
const hasJSDoc = hasPrecedingJSDocComment ( ) ;
5826
5830
parseExpected ( SyntaxKind . WithKeyword ) ;
5827
5831
const openParenPosition = scanner . getTokenPos ( ) ;
5828
- parseExpected ( SyntaxKind . OpenParenToken ) ;
5832
+ const openParenParsed = parseExpected ( SyntaxKind . OpenParenToken ) ;
5829
5833
const expression = allowInAnd ( parseExpression ) ;
5830
- parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenPosition ) ;
5834
+ parseExpectedMatchingBrackets ( SyntaxKind . OpenParenToken , SyntaxKind . CloseParenToken , openParenParsed , openParenPosition ) ;
5831
5835
const statement = doInsideOfContext ( NodeFlags . InWithStatement , parseStatement ) ;
5832
5836
return withJSDoc ( finishNode ( factory . createWithStatement ( expression , statement ) , pos ) , hasJSDoc ) ;
5833
5837
}
0 commit comments