1
0
mirror of https://github.com/golang/go synced 2024-09-30 06:24:33 -06:00

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/16930
Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
Robert Griesemer 2015-11-13 21:21:39 -08:00
parent d8dd9c714b
commit ac658a83c2

View File

@ -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
}
}