aboutsummaryrefslogtreecommitdiff
path: root/src/internal/reflectlite
diff options
context:
space:
mode:
authorzhouguangyuan <zhouguangyuan.xian@gmail.com>2022-03-20 02:10:17 +0800
committerDaniel Martí <mvdan@mvdan.cc>2022-03-20 15:54:23 +0000
commit47efdcbf4c40a718ba6e1c28b8bb7b73e729f2b0 (patch)
tree3524863cdf47fee4e8d0352489bb482d6c90d4f7 /src/internal/reflectlite
parent4d2da99498ff55700eeddf09d603fa0618c8b55c (diff)
downloadgo-47efdcbf4c40a718ba6e1c28b8bb7b73e729f2b0.tar.xz
internal/reflectlite: fix name of type parameter
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>
Diffstat (limited to 'src/internal/reflectlite')
-rw-r--r--src/internal/reflectlite/all_test.go5
-rw-r--r--src/internal/reflectlite/type.go9
2 files changed, 13 insertions, 1 deletions
diff --git a/src/internal/reflectlite/all_test.go b/src/internal/reflectlite/all_test.go
index ea750831ef..eb6aaa9c28 100644
--- a/src/internal/reflectlite/all_test.go
+++ b/src/internal/reflectlite/all_test.go
@@ -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) {
diff --git a/src/internal/reflectlite/type.go b/src/internal/reflectlite/type.go
index 8f649600d2..34677b400e 100644
--- a/src/internal/reflectlite/type.go
+++ b/src/internal/reflectlite/type.go
@@ -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:]