]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/syntax: simpler position base update for line directives (cleanup)
authorRobert Griesemer <gri@golang.org>
Wed, 21 Feb 2018 04:14:51 +0000 (20:14 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 21 Feb 2018 21:06:36 +0000 (21:06 +0000)
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>
src/cmd/compile/internal/syntax/parser.go

index 5b7ac6cc40602d07ec9f89022278940b497db067..8f9775afe7f078ab07152b79cd6cc65b0eae2bb2 100644 (file)
@@ -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 {