Commit 3f3ff2bd authored by Robert Griesemer's avatar Robert Griesemer

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
parent f8925405
...@@ -1716,8 +1716,7 @@ func (p *parser) parseForStmt() ast.Stmt { ...@@ -1716,8 +1716,7 @@ func (p *parser) parseForStmt() ast.Stmt {
var key, value ast.Expr var key, value ast.Expr
switch len(as.Lhs) { switch len(as.Lhs) {
case 2: case 2:
value = as.Lhs[1] key, value = as.Lhs[0], as.Lhs[1]
fallthrough
case 1: case 1:
key = as.Lhs[0] key = as.Lhs[0]
default: default:
...@@ -1785,8 +1784,8 @@ func (p *parser) parseStmt() (s ast.Stmt) { ...@@ -1785,8 +1784,8 @@ func (p *parser) parseStmt() (s ast.Stmt) {
case token.FOR: case token.FOR:
s = p.parseForStmt() s = p.parseForStmt()
case token.SEMICOLON: case token.SEMICOLON:
s = &ast.EmptyStmt{p.pos}
p.next() p.next()
fallthrough
case token.RBRACE: case token.RBRACE:
// a semicolon may be omitted before a closing "}" // a semicolon may be omitted before a closing "}"
s = &ast.EmptyStmt{p.pos} s = &ast.EmptyStmt{p.pos}
......
...@@ -1030,12 +1030,12 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) { ...@@ -1030,12 +1030,12 @@ func (p *printer) stmt(stmt ast.Stmt, nextIsRBrace bool, multiLine *bool) {
// a "correcting" unindent immediately following a line break // a "correcting" unindent immediately following a line break
// is applied before the line break if there is no comment // is applied before the line break if there is no comment
// between (see writeWhitespace) // between (see writeWhitespace)
p.print(unindent, s.Pos()) p.print(unindent)
p.expr(s.Label, multiLine) p.expr(s.Label, multiLine)
p.print(token.COLON, indent) p.print(token.COLON, indent)
if _, isEmpty := s.Stmt.(*ast.EmptyStmt); isEmpty { if e, isEmpty := s.Stmt.(*ast.EmptyStmt); isEmpty {
if !nextIsRBrace { if !nextIsRBrace {
p.print(newline, s.Stmt.Pos(), token.SEMICOLON) p.print(newline, e.Pos(), token.SEMICOLON)
break break
} }
} else { } else {
......
...@@ -259,11 +259,11 @@ L: // no semicolon needed ...@@ -259,11 +259,11 @@ L: // no semicolon needed
func _() { func _() {
switch 0 { switch 0 {
case 0: case 0:
L0: // semicolon required L0:
; ; // semicolon required
case 1: case 1:
L1: // semicolon required L1:
; ; // semicolon required
default: default:
L2: // no semicolon needed L2: // no semicolon needed
} }
......
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