goprotobuf: update to loss of unsafe.Unreflect, unsafe.New
R=rsc
CC=golang-dev
http://codereview.appspot.com/5661045
diff --git a/proto/decode.go b/proto/decode.go
index 836227e..17f95f2 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -355,7 +355,7 @@
if !ok {
// Maybe it's an extension?
o.ptr = base // copy the address here to avoid a heap allocation.
- iv := unsafe.Unreflect(t, unsafe.Pointer(&o.ptr))
+ iv := reflect.NewAt(t, unsafe.Pointer(&o.ptr)).Elem().Interface()
if e, ok := iv.(extendableProto); ok && isExtensionField(e, int32(tag)) {
if err = o.skip(st, tag, wire); err == nil {
e.ExtensionMap()[int32(tag)] = Extension{enc: append([]byte(nil), o.buf[oi:o.index]...)}
@@ -635,8 +635,8 @@
func (o *Buffer) dec_struct_group(p *Properties, base uintptr) error {
ptr := (**struct{})(unsafe.Pointer(base + p.offset))
typ := p.stype.Elem()
- structv := unsafe.New(typ)
- bas := uintptr(structv)
+ bas := reflect.New(typ).Pointer()
+ structv := unsafe.Pointer(bas)
*ptr = (*struct{})(structv)
err := o.unmarshalType(p.stype, true, bas)
@@ -653,12 +653,12 @@
ptr := (**struct{})(unsafe.Pointer(base + p.offset))
typ := p.stype.Elem()
- structv := unsafe.New(typ)
- bas := uintptr(structv)
+ bas := reflect.New(typ).Pointer()
+ structv := unsafe.Pointer(bas)
*ptr = (*struct{})(structv)
// If the object can unmarshal itself, let it.
- iv := unsafe.Unreflect(p.stype, unsafe.Pointer(ptr))
+ iv := reflect.NewAt(p.stype, unsafe.Pointer(ptr)).Elem().Interface()
if u, ok := iv.(Unmarshaler); ok {
return u.Unmarshal(raw)
}
@@ -692,8 +692,8 @@
y := *v
typ := p.stype.Elem()
- structv := unsafe.New(typ)
- bas := uintptr(structv)
+ bas := reflect.New(typ).Pointer()
+ structv := unsafe.Pointer(bas)
y = append(y, (*struct{})(structv))
*v = y
@@ -708,7 +708,7 @@
}
// If the object can unmarshal itself, let it.
- iv := unsafe.Unreflect(p.stype, unsafe.Pointer(&y[len(y)-1]))
+ iv := reflect.NewAt(p.stype, unsafe.Pointer(&y[len(y)-1])).Elem().Interface()
if u, ok := iv.(Unmarshaler); ok {
return u.Unmarshal(raw)
}