]> Cypherpunks repositories - gostls13.git/commitdiff
go/parser: correct position of empty statement ';'
authorRobert Griesemer <gri@golang.org>
Wed, 9 Jun 2010 00:06:26 +0000 (17:06 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 9 Jun 2010 00:06:26 +0000 (17:06 -0700)
(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

src/pkg/go/parser/parser.go
src/pkg/go/printer/nodes.go
src/pkg/go/printer/testdata/statements.golden

index f9264f03bb32880863b5402d7a1cbcf81ce8e997..c1914005a986fe06c17a0816067dcaefe152f8bd 100644 (file)
@@ -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}
index 77287f82bde846821dc463619e4c626896e3f296..a48a40790e88386a42afb013634f2c7a9f91f8e3 100644 (file)
@@ -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 {
index 9087390e7c05fbbdc1d21f629bde64441c6886d6..73a3e123683dc5c27d027b9f12658d7716045e42 100644 (file)
@@ -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
        }