Skip to content

Commit fba8b25

Browse files
authored
Port TS PR 61764 (for (using of = is incorrectly parsed) (#1307)
1 parent 3195e8e commit fba8b25

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

internal/parser/parser.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6337,24 +6337,34 @@ func (p *Parser) isUsingDeclaration() bool {
63376337
// 'using' always starts a lexical declaration if followed by an identifier. We also eagerly parse
63386338
// |ObjectBindingPattern| so that we can report a grammar error during check. We don't parse out
63396339
// |ArrayBindingPattern| since it potentially conflicts with element access (i.e., `using[x]`).
6340-
return p.lookAhead((*Parser).nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine)
6340+
return p.lookAhead(func(p *Parser) bool {
6341+
return p.nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine( /*disallowOf*/ false)
6342+
})
63416343
}
63426344

6343-
func (p *Parser) nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine() bool {
6345+
func (p *Parser) nextTokenIsEqualsOrSemicolonOrColonToken() bool {
63446346
p.nextToken()
6347+
return p.token == ast.KindEqualsToken || p.token == ast.KindSemicolonToken || p.token == ast.KindColonToken
6348+
}
6349+
6350+
func (p *Parser) nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine(disallowOf bool) bool {
6351+
p.nextToken()
6352+
if disallowOf && p.token == ast.KindOfKeyword {
6353+
return p.lookAhead((*Parser).nextTokenIsEqualsOrSemicolonOrColonToken)
6354+
}
63456355
return p.isBindingIdentifier() || p.token == ast.KindOpenBraceToken && !p.hasPrecedingLineBreak()
63466356
}
63476357

63486358
func (p *Parser) nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLineDisallowOf() bool {
6349-
return p.nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine() && p.token != ast.KindOfKeyword
6359+
return p.nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine( /*disallowOf*/ true)
63506360
}
63516361

63526362
func (p *Parser) isAwaitUsingDeclaration() bool {
63536363
return p.lookAhead((*Parser).nextIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine)
63546364
}
63556365

63566366
func (p *Parser) nextIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine() bool {
6357-
return p.nextToken() == ast.KindUsingKeyword && p.nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine()
6367+
return p.nextToken() == ast.KindUsingKeyword && p.nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine( /*disallowOf*/ false)
63586368
}
63596369

63606370
func (p *Parser) nextTokenIsTokenStringLiteral() bool {

0 commit comments

Comments
 (0)