Skip to content

Commit

Permalink
JS: fix parsing of CallExpression arguments, require comma after spre…
Browse files Browse the repository at this point in the history
…ad element
  • Loading branch information
tdewolff committed Nov 27, 2023
1 parent 8e56e59 commit d9e1e7b
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
15 changes: 8 additions & 7 deletions js/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -1444,21 +1444,22 @@ func (p *Parser) parseArguments() (args Args) {
// assume we're on (
p.next()
args.List = make([]Arg, 0, 4)
for {
for p.tt != CloseParenToken && p.tt != ErrorToken {
rest := p.tt == EllipsisToken
if rest {
p.next()
}

if p.tt == CloseParenToken || p.tt == ErrorToken {
break
}
args.List = append(args.List, Arg{
Value: p.parseExpression(OpAssign),
Rest: rest,
})
if p.tt == CommaToken {
p.next()
if p.tt != CloseParenToken {
if p.tt != CommaToken {
p.fail("arguments", CommaToken, CloseParenToken)
return
} else {
p.next() // CommaToken
}
}
}
p.consume("arguments", CloseParenToken)
Expand Down
4 changes: 2 additions & 2 deletions js/parse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -535,12 +535,12 @@ func TestParseError(t *testing.T) {
{"x=new.bad", "expected target instead of bad in new.target expression"},
{"x=import.bad", "expected meta instead of bad in import.meta expression"},
{"x=super", "expected [, (, or . instead of EOF in super expression"},
{"x=super(a", "expected ) instead of EOF in arguments"},
{"x=super(a", "expected , or ) instead of EOF in arguments"},
{"x=super[a", "expected ] instead of EOF in index expression"},
{"x=super.", "expected Identifier instead of EOF in dot expression"},
{"x=new super(b)", "expected [ or . instead of ( in super expression"},
{"x=import", "expected ( instead of EOF in import expression"},
{"x=import(5", "expected ) instead of EOF in arguments"},
{"x=import(5", "expected , or ) instead of EOF in arguments"},
{"x=new import(b)", "unexpected ( in expression"},
{"import", "expected String, Identifier, *, or { instead of EOF in import statement"},
{"import *", "expected as instead of EOF in import statement"},
Expand Down

0 comments on commit d9e1e7b

Please sign in to comment.