diff options
| author | zhouguangyuan <zhouguangyuan.xian@gmail.com> | 2022-03-20 02:10:17 +0800 |
|---|---|---|
| committer | Daniel Martí <mvdan@mvdan.cc> | 2022-03-20 15:54:23 +0000 |
| commit | 47efdcbf4c40a718ba6e1c28b8bb7b73e729f2b0 (patch) | |
| tree | 3524863cdf47fee4e8d0352489bb482d6c90d4f7 /src/internal/reflectlite | |
| parent | 4d2da99498ff55700eeddf09d603fa0618c8b55c (diff) | |
| download | go-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.go | 5 | ||||
| -rw-r--r-- | src/internal/reflectlite/type.go | 9 |
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:] |
