compiler,reflect: sort out pkg path vs pkg name for named types

This commit is contained in:
Damian Gryski
2023-03-13 14:49:51 -07:00
committed by Ron Evans
parent f2cc98caa5
commit 876f08979f
4 changed files with 31 additions and 11 deletions
+16 -8
View File
@@ -504,13 +504,11 @@ func pointerTo(t *rawType) *rawType {
func (t *rawType) String() string {
if t.isNamed() {
path := t.PkgPath()
slash := len(path) - 1
for slash >= 0 && path[slash] != '/' {
slash--
s := t.name()
if s[0] == '.' {
return s[1:]
}
shortened := path[slash+1:]
return shortened + "." + t.Name()
return s
}
switch t.Kind() {
@@ -1037,10 +1035,20 @@ func readStringZ(data unsafe.Pointer) string {
}))
}
func (t *rawType) name() string {
ntype := (*namedType)(unsafe.Pointer(t))
return readStringZ(unsafe.Pointer(&ntype.name[0]))
}
func (t *rawType) Name() string {
if t.isNamed() {
ntype := (*namedType)(unsafe.Pointer(t))
return readStringZ(unsafe.Pointer(&ntype.name[0]))
name := t.name()
for i := 0; i < len(name); i++ {
if name[i] == '.' {
return name[i+1:]
}
}
panic("corrupt name data")
}
if t.Kind() <= UnsafePointer {
+5
View File
@@ -243,6 +243,11 @@ func TestNamedTypes(t *testing.T) {
t.Errorf("TypeOf.String()=%v, want %v", got, want)
}
errorType := TypeOf((*error)(nil)).Elem()
if s := errorType.String(); s != "error" {
t.Errorf("error type = %v, want error", s)
}
m := make(map[[4]uint16]string)
if got, want := TypeOf(m).String(), "map[[4]uint16]string"; got != want {