From: zhouguangyuan Date: Sat, 19 Mar 2022 18:10:17 +0000 (+0800) Subject: internal/reflectlite: fix name of type parameter X-Git-Tag: go1.19beta1~994 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=47efdcbf4c40a718ba6e1c28b8bb7b73e729f2b0;p=gostls13.git 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 TryBot-Result: Gopher Robot Reviewed-by: Ian Lance Taylor Reviewed-by: Daniel Martí Trust: Daniel Martí --- 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:]