diff options
author | Robert Griesemer <gri@golang.org> | 2015-02-23 23:51:05 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2015-02-24 21:34:05 +0000 |
commit | 5ce9fde8b64a07a7cbfbe43c9451e2d1d536c972 (patch) | |
tree | 235647f24d466e347f4f5b0b88cdd6589d74c447 /src/go/parser/parser.go | |
parent | c651fdc0cf2ba7986ce0a0a23b4dbb44b6ecdae3 (diff) | |
download | go-5ce9fde8b64a07a7cbfbe43c9451e2d1d536c972.tar.gz go-5ce9fde8b64a07a7cbfbe43c9451e2d1d536c972.zip |
go/ast, go/parser: correct End() position for *ast.EmptyStmt
- added a new field ast.EmptyStmt.Implicit to indicate explicit
or implicit semicolon
- fix ast.EmptyStmt.End() accordingly
- adjusted parser and added test case
Fixes #9979.
Change-Id: I72b0983b3a0cabea085598e1bf6c8df629776b57
Reviewed-on: https://go-review.googlesource.com/5720
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/go/parser/parser.go')
-rw-r--r-- | src/go/parser/parser.go | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/go/parser/parser.go b/src/go/parser/parser.go index 0409122c81..d1b766cfbb 100644 --- a/src/go/parser/parser.go +++ b/src/go/parser/parser.go @@ -2152,11 +2152,14 @@ func (p *parser) parseStmt() (s ast.Stmt) { case token.FOR: s = p.parseForStmt() case token.SEMICOLON: - s = &ast.EmptyStmt{Semicolon: p.pos} + // Is it ever possible to have an implicit semicolon + // producing an empty statement in a valid program? + // (handle correctly anyway) + s = &ast.EmptyStmt{Semicolon: p.pos, Implicit: p.lit == "\n"} p.next() case token.RBRACE: // a semicolon may be omitted before a closing "}" - s = &ast.EmptyStmt{Semicolon: p.pos} + s = &ast.EmptyStmt{Semicolon: p.pos, Implicit: true} default: // no statement found pos := p.pos |