diff options
Diffstat (limited to 'spew/common.go')
| -rw-r--r-- | spew/common.go | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/spew/common.go b/spew/common.go index 2cec098..0ce0df1 100644 --- a/spew/common.go +++ b/spew/common.go @@ -109,7 +109,19 @@ func unsafeReflectValue(v reflect.Value) (rv reflect.Value) { vt = reflect.PtrTo(v.Type()) indirects++ } else if offsetScalar != 0 { - upv = unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetScalar) + // The value is in the scalar field when it's not one of the + // reference types. + switch vt.Kind() { + case reflect.Uintptr: + case reflect.Chan: + case reflect.Func: + case reflect.Map: + case reflect.Ptr: + case reflect.UnsafePointer: + default: + upv = unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + + offsetScalar) + } } pv := reflect.NewAt(vt, upv) |
