]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile/internal/types2: implement TypeParam.Constraint
authorRobert Griesemer <gri@golang.org>
Fri, 23 Jul 2021 17:26:07 +0000 (10:26 -0700)
committerRobert Griesemer <gri@golang.org>
Mon, 26 Jul 2021 20:53:16 +0000 (20:53 +0000)
Change-Id: I95a96f9dbd199cee3a4be8f42cd64e7f44ba5e5b
Reviewed-on: https://go-review.googlesource.com/c/go/+/336989
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/types2/typeparam.go

index b73b4edf79f25dcdf4664f5c171a147cd99c61bb..0aca227c0a7ac4925708164bed6c395e89b6a201 100644 (file)
@@ -53,20 +53,28 @@ func (t *TypeParam) SetId(id uint64) {
        t.id = id
 }
 
-func (t *TypeParam) Bound() *Interface {
-       // we may not have an interface (error reported elsewhere)
-       iface, _ := under(t.bound).(*Interface)
-       if iface == nil {
-               return &emptyInterface
+// Constraint returns the type constraint specified for t.
+func (t *TypeParam) Constraint() Type {
+       // compute the type set if possible (we may not have an interface)
+       if iface, _ := under(t.bound).(*Interface); iface != nil {
+               // use the type bound position if we have one
+               pos := nopos
+               if n, _ := t.bound.(*Named); n != nil {
+                       pos = n.obj.pos
+               }
+               computeTypeSet(t.check, pos, iface)
        }
-       // use the type bound position if we have one
-       pos := nopos
-       if n, _ := t.bound.(*Named); n != nil {
-               pos = n.obj.pos
+       return t.bound
+}
+
+// Bound returns the underlying type of the type parameter's
+// constraint.
+// Deprecated for external use. Use Constraint instead.
+func (t *TypeParam) Bound() *Interface {
+       if iface, _ := under(t.Constraint()).(*Interface); iface != nil {
+               return iface
        }
-       // TODO(gri) switch this to an unexported method on Checker.
-       computeTypeSet(t.check, pos, iface)
-       return iface
+       return &emptyInterface
 }
 
 func (t *TypeParam) SetBound(bound Type) {