[dev.typeparams] cmd/compile/internal/types2: minor cleanup of writeTParamList

Change-Id: Iaa58b17ad65e93548bb3da8231e0cb6da0c48105
Reviewed-on: https://go-review.googlesource.com/c/go/+/339903
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
Robert Griesemer 2021-08-04 21:10:31 -07:00
parent 0811108670
commit c3b57af8bc
2 changed files with 14 additions and 10 deletions

View file

@ -83,7 +83,7 @@ func (check *Checker) infer(pos syntax.Pos, tparams []*TypeName, targs []Type, p
// Substitute type arguments for their respective type parameters in params, // Substitute type arguments for their respective type parameters in params,
// if any. Note that nil targs entries are ignored by check.subst. // if any. Note that nil targs entries are ignored by check.subst.
// TODO(gri) Can we avoid this (we're setting known type argumemts below, // TODO(gri) Can we avoid this (we're setting known type arguments below,
// but that doesn't impact the isParameterized check for now). // but that doesn't impact the isParameterized check for now).
if params.Len() > 0 { if params.Len() > 0 {
smap := makeSubstMap(tparams, targs) smap := makeSubstMap(tparams, targs)

View file

@ -246,23 +246,27 @@ func writeTParamList(buf *bytes.Buffer, list []*TypeName, qf Qualifier, visited
buf.WriteString("[") buf.WriteString("[")
var prev Type var prev Type
for i, p := range list { for i, p := range list {
// TODO(gri) support 'any' sugar here. // Determine the type parameter and its constraint.
var b Type = &emptyInterface // list is expected to hold type parameter names,
if t, _ := p.typ.(*TypeParam); t != nil && t.bound != nil { // but don't crash if that's not the case.
b = t.bound tpar, _ := p.typ.(*TypeParam)
var bound Type
if tpar != nil {
bound = tpar.bound // should not be nil but we want to see it if it is
} }
if i > 0 { if i > 0 {
if b != prev { if bound != prev {
// type bound changed - write previous one before advancing // bound changed - write previous one before advancing
buf.WriteByte(' ') buf.WriteByte(' ')
writeType(buf, prev, qf, visited) writeType(buf, prev, qf, visited)
} }
buf.WriteString(", ") buf.WriteString(", ")
} }
prev = b prev = bound
if t, _ := p.typ.(*TypeParam); t != nil { if tpar != nil {
writeType(buf, t, qf, visited) writeType(buf, tpar, qf, visited)
} else { } else {
buf.WriteString(p.name) buf.WriteString(p.name)
} }