reflect: add SetZero
This was added in Go 1.20 and is required by encoding/json starting with Go 1.21.
Этот коммит содержится в:
родитель
e075e0591d
коммит
fffad84a63
2 изменённых файлов: 10 добавлений и 3 удалений
|
@ -1559,8 +1559,6 @@ func TestIsZero(t *testing.T) {
|
|||
t.Errorf("%d: IsZero(Zero(TypeOf((%s)(%+v)))) is false", i, x.Kind(), tt.x)
|
||||
}
|
||||
|
||||
/* // TODO(tinygo): missing SetZero support
|
||||
|
||||
p := New(x.Type()).Elem()
|
||||
p.Set(x)
|
||||
p.SetZero()
|
||||
|
@ -1568,7 +1566,6 @@ func TestIsZero(t *testing.T) {
|
|||
t.Errorf("%d: IsZero((%s)(%+v)) is true after SetZero", i, p.Kind(), tt.x)
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1068,6 +1068,13 @@ func (v Value) Set(x Value) {
|
|||
memcpy(v.value, xptr, size)
|
||||
}
|
||||
|
||||
func (v Value) SetZero() {
|
||||
v.checkAddressable()
|
||||
v.checkRO()
|
||||
size := v.typecode.Size()
|
||||
memzero(v.value, size)
|
||||
}
|
||||
|
||||
func (v Value) SetBool(x bool) {
|
||||
v.checkAddressable()
|
||||
v.checkRO()
|
||||
|
@ -1569,6 +1576,9 @@ func (e *ValueError) Error() string {
|
|||
//go:linkname memcpy runtime.memcpy
|
||||
func memcpy(dst, src unsafe.Pointer, size uintptr)
|
||||
|
||||
//go:linkname memzero runtime.memzero
|
||||
func memzero(ptr unsafe.Pointer, size uintptr)
|
||||
|
||||
//go:linkname alloc runtime.alloc
|
||||
func alloc(size uintptr, layout unsafe.Pointer) unsafe.Pointer
|
||||
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче