From 1811aeae66bee899317403c92c83b56673919775 Mon Sep 17 00:00:00 2001 From: Dan Scales Date: Fri, 5 Mar 2021 22:07:56 -0800 Subject: cmd/compile: deal with helper generic types that add methods to T Deal with cases like: 'type P[T any] T' (used to add methods to an arbitrary type T), In this case, P[T] has kind types.TTYPEPARAM (as does T itself), but requires more code to substitute than a simple TTYPEPARAM T. See the comment near the beginning of subster.typ() in stencil.go. Add new test absdiff.go. This test has a case for complex types (which I've commented out) that will only work when we deal better with Go builtins in generic functions (like real and imag). Remove change in fmt.go for TTYPEPARAMS that is no longer needed (since all TTYPEPARAMS have a sym) and was sometimes causing an extra prefix when formatting method names. Separate out the setting of a TTYPEPARAM bound, since it can reference the TTYPEPARAM being defined, so must be done separately. Also, we don't currently (and may not ever) need bounds after types2 typechecking. Change-Id: Id173057e0c4563b309b95e665e9c1151ead4ba77 Reviewed-on: https://go-review.googlesource.com/c/go/+/300049 Run-TryBot: Dan Scales TryBot-Result: Go Bot Trust: Dan Scales Trust: Robert Griesemer Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/types/type.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/cmd/compile/internal/types/type.go') diff --git a/src/cmd/compile/internal/types/type.go b/src/cmd/compile/internal/types/type.go index d76d9b409f..ffaf755345 100644 --- a/src/cmd/compile/internal/types/type.go +++ b/src/cmd/compile/internal/types/type.go @@ -1742,12 +1742,9 @@ func NewInterface(pkg *Pkg, methods []*Field) *Type { return t } -// NewTypeParam returns a new type param with the given constraint (which may -// not really be needed except for the type checker). -func NewTypeParam(pkg *Pkg, constraint *Type) *Type { +// NewTypeParam returns a new type param. +func NewTypeParam(pkg *Pkg) *Type { t := New(TTYPEPARAM) - constraint.wantEtype(TINTER) - t.methods = constraint.methods t.Extra.(*Interface).pkg = pkg t.SetHasTParam(true) return t -- cgit v1.2.3-54-g00ecf