mirror of
https://github.com/golang/go
synced 2024-09-25 01:20:13 -06:00
go/parser: correct position of empty statement ';'
(caused certain files to not be idempotent under gofmt) - corrected golden files for go/printer - slightly simplified some code in nodes.go (no impact on formatting) - these changes have no impact on gofmt output of .go files under src, misc fallthrough statement considered harmful! R=rsc CC=golang-dev https://golang.org/cl/1593042
This commit is contained in:
parent
f892540513
commit
3f3ff2bd5c
@ -1716,8 +1716,7 @@ func (p *parser) parseForStmt() ast.Stmt {
|
||||
var key, value ast.Expr
|
||||
switch len(as.Lhs) {
|
||||
case 2:
|
||||
value = as.Lhs[1]
|
||||
fallthrough
|
||||
key, value = as.Lhs[0], as.Lhs[1]
|
||||
case 1:
|
||||
key = as.Lhs[0]
|
||||
default:
|
||||
@ -1785,8 +1784,8 @@ func (p *parser) parseStmt() (s ast.Stmt) {
|
||||
case token.FOR:
|
||||
s = p.parseForStmt()
|
||||
case token.SEMICOLON:
|
||||
s = &ast.EmptyStmt{p.pos}
|
||||
p.next()
|
||||
fallthrough
|
||||
case token.RBRACE:
|
||||
// a semicolon may be omitted before a closing "}"
|
||||
s = &ast.EmptyStmt{p.pos}
|
||||
|
@ -1030,12 +1030,12 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) {
|
||||
// a "correcting" unindent immediately following a line break
|
||||
// is applied before the line break if there is no comment
|
||||
// between (see writeWhitespace)
|
||||
p.print(unindent, s.Pos())
|
||||
p.print(unindent)
|
||||
p.expr(s.Label, multiLine)
|
||||
p.print(token.COLON, indent)
|
||||
if _, isEmpty := s.Stmt.(*ast.EmptyStmt); isEmpty {
|
||||
if e, isEmpty := s.Stmt.(*ast.EmptyStmt); isEmpty {
|
||||
if !nextIsRBrace {
|
||||
p.print(newline, s.Stmt.Pos(), token.SEMICOLON)
|
||||
p.print(newline, e.Pos(), token.SEMICOLON)
|
||||
break
|
||||
}
|
||||
} else {
|
||||
|
@ -259,11 +259,11 @@ L: // no semicolon needed
|
||||
func _() {
|
||||
switch 0 {
|
||||
case 0:
|
||||
L0: // semicolon required
|
||||
;
|
||||
L0:
|
||||
; // semicolon required
|
||||
case 1:
|
||||
L1: // semicolon required
|
||||
;
|
||||
L1:
|
||||
; // semicolon required
|
||||
default:
|
||||
L2: // no semicolon needed
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user