aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2018-02-20 20:14:51 -0800
committerRobert Griesemer <gri@golang.org>2018-02-21 21:06:36 +0000
commite2a86b6bd9d0b0a2be2d6de7259f50eae73ff7e0 (patch)
treee74012f7b49b947196dc0cfcabbddf3b219700a6 /src/cmd
parente02d6bb621a6c452cbef37946467f94a0054f2b1 (diff)
downloadgo-e2a86b6bd9d0b0a2be2d6de7259f50eae73ff7e0.tar.xz
cmd/compile/internal/syntax: simpler position base update for line directives (cleanup)
The existing code was somewhat convoluted and made several assumptions about the encoding of position bases: 1) The position's base for a file contained a position whose base pointed to itself (which is true but an implementation detail of src.Pos). 2) Updating the position base for a line directive required finding the base of the most recent's base position. This change simply stores the file's position base and keeps using it directly for each line directive (instead of getting it from the most recently updated base). Change-Id: I4d80da513bededb636eab0ce53257fda73f0dbc0 Reviewed-on: https://go-review.googlesource.com/95736 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/syntax/parser.go16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go
index 5b7ac6cc40..8f9775afe7 100644
--- a/src/cmd/compile/internal/syntax/parser.go
+++ b/src/cmd/compile/internal/syntax/parser.go
@@ -16,23 +16,24 @@ const debug = false
const trace = false
type parser struct {
- base *src.PosBase
+ file *src.PosBase
errh ErrorHandler
fileh FilenameHandler
mode Mode
scanner
- first error // first error encountered
- errcnt int // number of errors encountered
- pragma Pragma // pragma flags
+ base *src.PosBase // current position base
+ first error // first error encountered
+ errcnt int // number of errors encountered
+ pragma Pragma // pragma flags
fnest int // function nesting level (for error handling)
xnest int // expression nesting level (for complit ambiguity resolution)
indent []byte // tracing support
}
-func (p *parser) init(base *src.PosBase, r io.Reader, errh ErrorHandler, pragh PragmaHandler, fileh FilenameHandler, mode Mode) {
- p.base = base
+func (p *parser) init(file *src.PosBase, r io.Reader, errh ErrorHandler, pragh PragmaHandler, fileh FilenameHandler, mode Mode) {
+ p.file = file
p.errh = errh
p.fileh = fileh
p.mode = mode
@@ -65,6 +66,7 @@ func (p *parser) init(base *src.PosBase, r io.Reader, errh ErrorHandler, pragh P
directives,
)
+ p.base = file
p.first = nil
p.errcnt = 0
p.pragma = 0
@@ -113,7 +115,7 @@ func (p *parser) updateBase(line, col uint, text string) {
}
// TODO(gri) pass column n2 to NewLinePragmaBase
- p.base = src.NewLinePragmaBase(src.MakePos(p.base.Pos().Base(), line, col), filename, absFilename, uint(n) /*uint(n2)*/)
+ p.base = src.NewLinePragmaBase(src.MakePos(p.file, line, col), filename, absFilename, uint(n) /*uint(n2)*/)
}
func commentText(s string) string {