]> Cypherpunks repositories - gostls13.git/commitdiff
internal/reflectlite: fix name of type parameter
authorzhouguangyuan <zhouguangyuan.xian@gmail.com>
Sat, 19 Mar 2022 18:10:17 +0000 (02:10 +0800)
committerDaniel Martí <mvdan@mvdan.cc>
Sun, 20 Mar 2022 15:54:23 +0000 (15:54 +0000)
CL 372774 is for reflect, this CL is for internal/reflectlite.

Updates #50208

Change-Id: Ib7e8b1bc031feab218d1addd78388fcfe9b675b5
Reviewed-on: https://go-review.googlesource.com/c/go/+/393918
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Trust: Daniel Martí <mvdan@mvdan.cc>

src/internal/reflectlite/all_test.go
src/internal/reflectlite/type.go

index ea750831efbe5828f166989b7e77d60e3b83b812..eb6aaa9c285db852f1e09727079725c597b74b95 100644 (file)
@@ -958,6 +958,9 @@ type nameTest struct {
        want string
 }
 
+type A struct{}
+type B[T any] struct{}
+
 var nameTests = []nameTest{
        {(*int32)(nil), "int32"},
        {(*D1)(nil), "D1"},
@@ -971,6 +974,8 @@ var nameTests = []nameTest{
                F()
        })(nil), ""},
        {(*TheNameOfThisTypeIsExactly255BytesLongSoWhenTheCompilerPrependsTheReflectTestPackageNameAndExtraStarTheLinkerRuntimeAndReflectPackagesWillHaveToCorrectlyDecodeTheSecondLengthByte0123456789_0123456789_0123456789_0123456789_0123456789_012345678)(nil), "TheNameOfThisTypeIsExactly255BytesLongSoWhenTheCompilerPrependsTheReflectTestPackageNameAndExtraStarTheLinkerRuntimeAndReflectPackagesWillHaveToCorrectlyDecodeTheSecondLengthByte0123456789_0123456789_0123456789_0123456789_0123456789_012345678"},
+       {(*B[A])(nil), "B[reflectlite_test.A]"},
+       {(*B[B[A]])(nil), "B[reflectlite_test.B[reflectlite_test.A]]"},
 }
 
 func TestNames(t *testing.T) {
index 8f649600d21d04b6683346df5a14bd8770f343c4..34677b400ec927691ffde9045614fea85a275334 100644 (file)
@@ -577,7 +577,14 @@ func (t *rtype) Name() string {
        }
        s := t.String()
        i := len(s) - 1
-       for i >= 0 && s[i] != '.' {
+       sqBrackets := 0
+       for i >= 0 && (s[i] != '.' || sqBrackets != 0) {
+               switch s[i] {
+               case ']':
+                       sqBrackets++
+               case '[':
+                       sqBrackets--
+               }
                i--
        }
        return s[i+1:]