compiler, reflect: add Type.PkgPath

This commit is contained in:
Damian Gryski
2023-03-02 11:52:52 -08:00
committed by Damian Gryski
parent c192c7376e
commit 2de64d3f4e
4 changed files with 45 additions and 7 deletions
+12 -4
View File
@@ -50,6 +50,8 @@
// meta uint8
// ptrTo *typeStruct
// elem *typeStruct // underlying type
// plen uintptr // length of pkgpath
// pkg *byte // pkgpath
// nlem uintptr // length of name
// name [1]byte // actual name; length nlem
//
@@ -428,6 +430,8 @@ type namedType struct {
rawType
ptrTo *rawType
elem *rawType
plen uintptr
pkg *byte
nlen uintptr
name [1]byte
}
@@ -489,8 +493,7 @@ func pointerTo(t *rawType) *rawType {
func (t *rawType) String() string {
if t.isNamed() {
// TODO(dgryski): `main` until pkgPath support lands
return "<unknown>" + "." + t.Name()
return t.PkgPath() + "." + t.Name()
}
switch t.Kind() {
@@ -918,8 +921,13 @@ func (t rawType) MethodByName(name string) (Method, bool) {
panic("unimplemented: (reflect.Type).MethodByName()")
}
func (t rawType) PkgPath() string {
panic("unimplemented: (reflect.Type).PkgPath()")
func (t *rawType) PkgPath() string {
if t.isNamed() {
ntype := (*namedType)(unsafe.Pointer(t))
return unsafe.String(ntype.pkg, ntype.plen)
}
return ""
}
func (t rawType) FieldByName(name string) (StructField, bool) {
+4
View File
@@ -221,6 +221,10 @@ func TestNamedTypes(t *testing.T) {
t.Errorf("TypeOf.Name()=%v, want %v", got, want)
}
if got, want := TypeOf(named).String(), "reflect_test.namedString"; got != want {
t.Errorf("TypeOf.String()=%v, want %v", got, want)
}
m := make(map[[4]uint16]string)
if got, want := TypeOf(m).String(), "map[[4]uint16]string"; got != want {