]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] go/types: convert testdata/examples tests to type set sytax
authorRob Findley <rfindley@google.com>
Wed, 9 Jun 2021 22:46:30 +0000 (18:46 -0400)
committerRobert Findley <rfindley@google.com>
Thu, 17 Jun 2021 02:09:33 +0000 (02:09 +0000)
This is a straightforward port of CL 324529 to go/types.

Change-Id: I788b1ac3d4e40060038a134c525c81624add8e81
Reviewed-on: https://go-review.googlesource.com/c/go/+/326680
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/types/testdata/examples/functions.go2
src/go/types/testdata/examples/inference.go2
src/go/types/testdata/examples/types.go2

index fb74ae7ae25c15f8efb715f5629d1ad294e5c7dd..f15c709ce44fe07872f9821c563693affe82b597 100644 (file)
@@ -98,7 +98,7 @@ func g2b[P, Q any](x P, y Q) {
 // Here's an example of a recursive function call with variadic
 // arguments and type inference inferring the type parameter of
 // the caller (i.e., itself).
-func max[T interface{ type int }](x ...T) T {
+func max[T interface{ ~int }](x ...T) T {
        var x0 T
        if len(x) > 0 {
                x0 = x[0]
index b4f3369aa0c2560ca5b8821dc6a949055ba19aee..1142e569b47c099e57195a973b90a352531dcd80 100644 (file)
@@ -7,7 +7,7 @@
 package p
 
 type Ordered interface {
-       type int, float64, string
+       ~int|~float64|~string
 }
 
 func min[T Ordered](x, y T) T
@@ -54,7 +54,7 @@ func _() {
        mixed[int, string](1.1 /* ERROR cannot use 1.1 */ , "", false)
 }
 
-func related1[Slice interface{type []Elem}, Elem any](s Slice, e Elem)
+func related1[Slice interface{~[]Elem}, Elem any](s Slice, e Elem)
 
 func _() {
        // related1 can be called with explicit instantiation.
@@ -78,7 +78,7 @@ func _() {
        related1(si, "foo" /* ERROR cannot use "foo" */ )
 }
 
-func related2[Elem any, Slice interface{type []Elem}](e Elem, s Slice)
+func related2[Elem any, Slice interface{~[]Elem}](e Elem, s Slice)
 
 func _() {
        // related2 can be called with explicit instantiation.
index 59c8804ad279597f3e3e0ce80bd5e05ad2d79b00..8cdd7f2fd27273b39d0517ab26a700064272d686 100644 (file)
@@ -165,7 +165,7 @@ type _ struct {
 // are type parameters. As with ordinary type definitions, the
 // types underlying properties are "inherited" but the methods
 // are not.
-func _[T interface{ m(); type int }]() {
+func _[T interface{ m(); ~int }]() {
        type L T
        var x L
 
@@ -238,11 +238,11 @@ func _[A Adder[A], B Adder[B], C Adder[A]]() {
 // The type of variables (incl. parameters and return values) cannot
 // be an interface with type constraints or be/embed comparable.
 type I interface {
-       type int
+       ~int
 }
 
 var (
-       _ interface /* ERROR contains type constraints */ {type int}
+       _ interface /* ERROR contains type constraints */ {~int}
        _ I /* ERROR contains type constraints */
 )
 
@@ -273,7 +273,7 @@ func _() {
 // (If a type list contains just a single const type, we could
 // allow it, but such type lists don't make much sense in the
 // first place.)
-func _[T interface { type int, float64 }]() {
+func _[T interface {~int|~float64}]() {
        // not valid
        const _ = T /* ERROR not constant */ (0)
        const _ T /* ERROR invalid constant type T */ = 1