]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/parser: removed TODO (cleanup)
authorgriesemer <gri@golang.org>
Tue, 17 Oct 2017 01:01:47 +0000 (18:01 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 17 Oct 2017 03:24:52 +0000 (03:24 +0000)
- checking for the correct closing token leads to slightly better
  behavior for some randomly bogus programs
- removed `switch` in favor of an `if` statement

Follow-up on https://go-review.googlesource.com/c/go/+/71250.

Change-Id: I47f6c47b43baf790907f55ed97a947661687a9db
Reviewed-on: https://go-review.googlesource.com/71252
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/syntax/parser.go

index 3d14b70eba324f1a289ce771c117579f10f688bd..e2d5817dc8642d588daa6b7254894f32dd261fcd 100644 (file)
@@ -368,17 +368,12 @@ func (p *parser) list(open, sep, close token, f func() bool) src.Pos {
        var done bool
        for p.tok != _EOF && p.tok != close && !done {
                done = f()
-               switch p.tok {
-               case sep:
-                       p.next()
-               case _Rparen, _Rbrace:
-                       // comma is optional before ) or } - nothing to do
-                       // TODO(gri): consider restricting this case
-                       //            to the expected close token only
-               default:
+               // sep is optional before close
+               if !p.got(sep) && p.tok != close {
                        p.syntax_error(fmt.Sprintf("expecting %s or %s", tokstring(sep), tokstring(close)))
                        p.advance(_Rparen, _Rbrack, _Rbrace)
                        if p.tok != close {
+                               // position could be better but we had an error so we don't care
                                return p.pos()
                        }
                }
@@ -386,7 +381,6 @@ func (p *parser) list(open, sep, close token, f func() bool) src.Pos {
 
        pos := p.pos()
        p.want(close)
-
        return pos
 }