]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix recorded export data position info
authorRobert Griesemer <gri@golang.org>
Tue, 7 Mar 2017 23:58:28 +0000 (15:58 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 8 Mar 2017 18:26:16 +0000 (18:26 +0000)
The position information recorded now consists of the line-
directive relative filename and line number. It would be
relatively easy to also encode absolute position information
as necessary (by serializing src.PosBase data).

For example, given $GOROOT/src/tmp/x.go:

package p

const C0 = 0

//line c.go:10
const C1 = 1

//line t.go:20
type T int

//line v.go:30
var V T

//line f.go:40
func F() {}

The recorded positions for the exported entities are:

C0 $GOROOT/src/tmp/x.go 3
C1 c.go 10
T t.go 20
V v.go 30
F f.go 40

Fix verified by manual inspection. There's currently no easy way
to test this, but it will eventually be tested when we fix #7311.

Fixes #19391.

Change-Id: I6269067ea58358250fe6dd1f73bdf9e5d2adfe3d
Reviewed-on: https://go-review.googlesource.com/37936
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/bexport.go

index 5f71ca0b71f5635b0c600fc866a4fadf04dbc246..24e043cacb6251118a81ff5952398f1cd3da9e58 100644 (file)
@@ -568,8 +568,8 @@ func (p *exporter) pos(n *Node) {
 func fileLine(n *Node) (file string, line int) {
        if n != nil {
                pos := Ctxt.PosTable.Pos(n.Pos)
-               file = pos.AbsFilename()
-               line = int(pos.Line())
+               file = pos.Base().AbsFilename()
+               line = int(pos.RelLine())
        }
        return
 }