Fine-tune skipping of tokens after missing closing parentheses in lists.
Fixes #22164.
Change-Id: I575d86e21048cd40340a2c08399e8b0deec337cf
Reviewed-on: https://go-review.googlesource.com/71250
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
// to the expected close token only
default:
p.syntax_error(fmt.Sprintf("expecting %s or %s", tokstring(sep), tokstring(close)))
- p.advance(close)
- done = true
+ p.advance(_Rparen, _Rbrack, _Rbrace)
+ if p.tok != close {
+ return p.pos()
+ }
}
}
--- /dev/null
+// errorcheck
+
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test error recovery after missing closing parentheses in lists.
+
+package p
+
+func f() {
+ x := f(g() // ERROR "unexpected newline"
+ y := 1
+}
+
+func g() {
+}
+
+func h() {
+ x := f(g() // ERROR "unexpected newline"
+}
+
+func i() {
+ x := []int{1, 2, 3 // ERROR "unexpected newline"
+ y := 0
+}
\ No newline at end of file