Commit ac658a83 authored by Robert Griesemer's avatar Robert Griesemer

cmd/compile/internal/gc: consume at least one token in case of syntax error

Fixes #13248.

TBR: iant

Change-Id: Ic8b10704f945e6daef04bb38a00e249854b4ef19
Reviewed-on: https://go-review.googlesource.com/16930Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
parent d8dd9c71
......@@ -141,17 +141,21 @@ func (p *parser) syntax_error(msg string) {
Yyerror("syntax error: unexpected " + tok + msg)
}
// Advance consumes tokens until it finds one in the stoplist.
// If the stoplist is empty, the next token is consumed.
// Advance consumes tokens until it finds a token of the stoplist.
// If the stoplist is empty or no advance was necessary, the next
// token is consumed.
func (p *parser) advance(stoplist ...int32) {
if len(stoplist) == 0 {
p.next()
return
}
for p.tok != EOF {
for n := 0; p.tok != EOF; n++ {
for _, stop := range stoplist {
if p.tok == stop {
if n == 0 {
p.next() // consume at least one token
}
return
}
}
......@@ -1409,8 +1413,8 @@ func (p *parser) operand(keep_parens bool) *Node {
return nil
default:
p.syntax_error("in operand")
p.advance(';', '}')
p.syntax_error("expecting expression")
p.advance()
return nil
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment