reflect: fix Addr() indirect value/flags and add tests.
Этот коммит содержится в:
родитель
0e94553b26
коммит
a52cad3825
2 изменённых файлов: 26 добавлений и 1 удалений
|
@ -223,7 +223,7 @@ func (v Value) Addr() Value {
|
||||||
|
|
||||||
return Value{
|
return Value{
|
||||||
typecode: pointerTo(v.typecode),
|
typecode: pointerTo(v.typecode),
|
||||||
value: unsafe.Pointer(&v.value),
|
value: v.value,
|
||||||
flags: v.flags ^ valueFlagIndirect,
|
flags: v.flags ^ valueFlagIndirect,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -266,6 +266,31 @@ func TestNamedTypes(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addrDecode(body interface{}) {
|
||||||
|
vbody := ValueOf(body)
|
||||||
|
ptr := vbody.Elem()
|
||||||
|
pptr := ptr.Addr()
|
||||||
|
addrSetInt(pptr.Interface())
|
||||||
|
}
|
||||||
|
|
||||||
|
func addrSetInt(intf interface{}) {
|
||||||
|
ptr := intf.(*uint64)
|
||||||
|
*ptr = 112358
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddr(t *testing.T) {
|
||||||
|
var n uint64
|
||||||
|
addrDecode(&n)
|
||||||
|
if n != 112358 {
|
||||||
|
t.Errorf("Failed to set t=112358, got %v", n)
|
||||||
|
}
|
||||||
|
|
||||||
|
v := ValueOf(&n)
|
||||||
|
if got, want := v.Elem().Addr().CanAddr(), false; got != want {
|
||||||
|
t.Errorf("Elem.Addr.CanAddr=%v, want %v", got, want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func equal[T comparable](a, b []T) bool {
|
func equal[T comparable](a, b []T) bool {
|
||||||
if len(a) != len(b) {
|
if len(a) != len(b) {
|
||||||
return false
|
return false
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче