Commit 0b2cb891 authored by griesemer's avatar griesemer Committed by Robert Griesemer

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: 's avatarMatthew Dempsky <mdempsky@google.com>
parent 38a3c2cf
...@@ -377,8 +377,10 @@ func (p *parser) list(open, sep, close token, f func() bool) src.Pos { ...@@ -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()
}
} }
} }
......
// 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
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