diff --git a/feature_reflect_map.go b/feature_reflect_map.go index cb40538..f537d02 100644 --- a/feature_reflect_map.go +++ b/feature_reflect_map.go @@ -48,7 +48,7 @@ func (decoder *mapDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { } iter.ReadMapCB(func(iter *Iterator, keyStr string) bool { elem := reflect.New(decoder.elemType) - decoder.elemDecoder.Decode(unsafe.Pointer(elem.Pointer()), iter) + decoder.elemDecoder.Decode(extractInterface(elem.Interface()).word, iter) // to put into map, we have to use reflection keyType := decoder.keyType // TODO: remove this from loop diff --git a/feature_reflect_slice.go b/feature_reflect_slice.go index 2b69902..078b3bc 100644 --- a/feature_reflect_slice.go +++ b/feature_reflect_slice.go @@ -118,8 +118,9 @@ func growOne(slice *sliceHeader, sliceType reflect.Type, elementType reflect.Typ } } } - newVal := reflect.MakeSlice(sliceType, newLen, newCap) - dst := unsafe.Pointer(newVal.Pointer()) + newVal := reflect.MakeSlice(sliceType, newLen, newCap).Interface() + newValPtr := extractInterface(newVal).word + dst := (*sliceHeader)(newValPtr).Data // copy old array into new array originalBytesCount := slice.Len * int(elementType.Size()) srcSliceHeader := (unsafe.Pointer)(&sliceHeader{slice.Data, originalBytesCount, originalBytesCount}) @@ -134,8 +135,9 @@ func reuseSlice(slice *sliceHeader, sliceType reflect.Type, expectedCap int) { if expectedCap <= slice.Cap { return } - newVal := reflect.MakeSlice(sliceType, 0, expectedCap) - dst := unsafe.Pointer(newVal.Pointer()) + newVal := reflect.MakeSlice(sliceType, 0, expectedCap).Interface() + newValPtr := extractInterface(newVal).word + dst := (*sliceHeader)(newValPtr).Data slice.Data = dst slice.Cap = expectedCap }