]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: export the Func.Endlineno field
authorYury Smolsky <yury@smolsky.by>
Thu, 26 Jul 2018 09:46:50 +0000 (12:46 +0300)
committerJosh Bleecher Snyder <josharian@gmail.com>
Thu, 23 Aug 2018 05:11:26 +0000 (05:11 +0000)
This CL exports the Func.Endlineno value for inlineable functions.
It is needed to grab the source code of an imported function
inlined into the function specified in $GOSSAFUNC.

See CL 126606 for details.

Updates #25904

Change-Id: I1e259e20445e4109b4621a95abb5bde1be457af1
Reviewed-on: https://go-review.googlesource.com/126605
Run-TryBot: Yury Smolsky <yury@smolsky.by>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/iexport.go
src/cmd/compile/internal/gc/iimport.go

index 5ce284dc732ccc708ae1934e360363f8ccd1f3af..3007c9cabfa57e5c1956a0364067475e3e7ad8fe 100644 (file)
@@ -952,6 +952,16 @@ func (w *exportWriter) funcExt(n *Node) {
                if n.Func.ExportInline() {
                        w.p.doInline(n)
                }
+
+               // Endlineno for inlined function.
+               if n.Name.Defn != nil {
+                       w.pos(n.Name.Defn.Func.Endlineno)
+               } else {
+                       // When the exported node was defined externally,
+                       // e.g. io exports atomic.(*Value).Load or bytes exports errors.New.
+                       // Keep it as we don't distinguish this case in iimport.go.
+                       w.pos(n.Func.Endlineno)
+               }
        } else {
                w.uint64(0)
        }
index 21151b52159e1a3e3484f35a11837a3d6577bfe3..6f0fd6b6d27694593704ac86b94bbdf689030ec5 100644 (file)
@@ -679,6 +679,7 @@ func (r *importReader) funcExt(n *Node) {
                n.Func.Inl = &Inline{
                        Cost: int32(u - 1),
                }
+               n.Func.Endlineno = r.pos()
        }
 }