mirror of
https://github.com/golang/go
synced 2024-11-14 07:40:21 -07:00
cmd/compile: set correct line number for method wrappers
When converting a method to a function, like this: type T ... func (t T) foo() { } var t T f := t.foo We need to build a wrapper function for the partially evaluated method. Currently that wrapper function gets the line number of the first place where t.foo appears. Instead it should have the line number of where foo is declared. Fixes #26839 Change-Id: I7dbe2094e53d5d336f329273f10f8430e0af544e Reviewed-on: https://go-review.googlesource.com/c/153498 Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
0f0b10818b
commit
f64385b720
@ -434,8 +434,15 @@ func makepartialcall(fn *Node, t0 *types.Type, meth *types.Sym) *Node {
|
|||||||
sym.SetUniq(true)
|
sym.SetUniq(true)
|
||||||
|
|
||||||
savecurfn := Curfn
|
savecurfn := Curfn
|
||||||
|
saveLineNo := lineno
|
||||||
Curfn = nil
|
Curfn = nil
|
||||||
|
|
||||||
|
// Set line number equal to the line number where the method is declared.
|
||||||
|
var m *types.Field
|
||||||
|
if lookdot0(meth, rcvrtype, &m, false) == 1 {
|
||||||
|
lineno = m.Pos
|
||||||
|
}
|
||||||
|
|
||||||
tfn := nod(OTFUNC, nil, nil)
|
tfn := nod(OTFUNC, nil, nil)
|
||||||
tfn.List.Set(structargs(t0.Params(), true))
|
tfn.List.Set(structargs(t0.Params(), true))
|
||||||
tfn.Rlist.Set(structargs(t0.Results(), false))
|
tfn.Rlist.Set(structargs(t0.Results(), false))
|
||||||
@ -482,6 +489,7 @@ func makepartialcall(fn *Node, t0 *types.Type, meth *types.Sym) *Node {
|
|||||||
sym.Def = asTypesNode(xfunc)
|
sym.Def = asTypesNode(xfunc)
|
||||||
xtop = append(xtop, xfunc)
|
xtop = append(xtop, xfunc)
|
||||||
Curfn = savecurfn
|
Curfn = savecurfn
|
||||||
|
lineno = saveLineNo
|
||||||
|
|
||||||
return xfunc
|
return xfunc
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user