From: Robert Griesemer Date: Fri, 19 Feb 2021 01:01:54 +0000 (-0800) Subject: [dev.typeparams] go/types: adjust printing of embedded struct fields (fixes x/tools... X-Git-Tag: go1.17beta1~1473^2~4 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8654db4555bd0537162a72c4514c601a9a8b5c30;p=gostls13.git [dev.typeparams] go/types: adjust printing of embedded struct fields (fixes x/tools/cmd/guru tests) Prior to 1.16, go/types printed an embedded struct field by simply printing its type, which may have included a package qualification. Just printing the type is not useful with generic types and we now must print the actual field name derived from the type - this leads to different output for non-generic imported embedded types. Fix by printing a package qualification in that case. Change-Id: I2cb2484da7732428d13fdfb5fe4ec1fa1ee813a2 Reviewed-on: https://go-review.googlesource.com/c/go/+/293961 Trust: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Go Bot --- diff --git a/src/go/types/typestring.go b/src/go/types/typestring.go index 64bbb33505..6ddba08bdc 100644 --- a/src/go/types/typestring.go +++ b/src/go/types/typestring.go @@ -126,6 +126,13 @@ func writeType(buf *bytes.Buffer, typ Type, qf Qualifier, visited []Type) { if i > 0 { buf.WriteString("; ") } + // For compatibility with versions < go1.16, qualify the field name + // of embedded fields with the package name. Various tests (such as + // in x/tools/cmd/guru) depend on this output; and x/tools packages + // are run against earlier versions of Go. + if n, _ := f.typ.(*Named); f.embedded && n != nil && n.obj != nil && n.obj.pkg != nil { + writePackage(buf, n.obj.pkg, qf) + } buf.WriteString(f.name) if f.embedded { // emphasize that the embedded field's name