mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 03:27:48 +00:00
compiler,reflect: sort out pkg path vs pkg name for named types
This commit is contained in:
+16
-8
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user