mirror of
https://github.com/golang/go
synced 2024-11-11 23:10:23 -07:00
cmd/compile/internal/syntax: better recovery after missing closing parentheses
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>
This commit is contained in:
parent
38a3c2cfe9
commit
0b2cb89196
@ -377,8 +377,10 @@ func (p *parser) list(open, sep, close token, f func() bool) src.Pos {
|
|||||||
// to the expected close token only
|
// to the expected close token only
|
||||||
default:
|
default:
|
||||||
p.syntax_error(fmt.Sprintf("expecting %s or %s", tokstring(sep), tokstring(close)))
|
p.syntax_error(fmt.Sprintf("expecting %s or %s", tokstring(sep), tokstring(close)))
|
||||||
p.advance(close)
|
p.advance(_Rparen, _Rbrack, _Rbrace)
|
||||||
done = true
|
if p.tok != close {
|
||||||
|
return p.pos()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
test/fixedbugs/issue22164.go
Normal file
26
test/fixedbugs/issue22164.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user