tt := (*sliceType)(unsafe.Pointer(v.typ))
typ := tt.elem
fl |= flag(typ.Kind()) << flagKindShift
- val := unsafe.Pointer(uintptr(s.Data) + uintptr(i)*typ.size)
+ val := unsafe.Pointer(s.Data + uintptr(i)*typ.size)
return Value{typ, val, fl}
case String:
if i < 0 || i >= s.Len {
panic("reflect: string index out of range")
}
- val := *(*byte)(unsafe.Pointer(uintptr(s.Data) + uintptr(i)))
+ val := *(*byte)(unsafe.Pointer(s.Data + uintptr(i)))
return Value{uint8Type, unsafe.Pointer(uintptr(val)), fl}
}
panic(&ValueError{"reflect.Value.Index", k})
return uintptr(p)
case Slice:
- return uintptr((*SliceHeader)(v.val).Data)
+ return (*SliceHeader)(v.val).Data
}
panic(&ValueError{"reflect.Value.Pointer", k})
}
}
var x string
val := (*StringHeader)(unsafe.Pointer(&x))
- val.Data = unsafe.Pointer(uintptr(s.Data) + uintptr(beg))
+ val.Data = s.Data + uintptr(beg)
val.Len = end - beg
return Value{v.typ, unsafe.Pointer(&x), v.flag}
}
// Reinterpret as *SliceHeader to edit.
s := (*SliceHeader)(unsafe.Pointer(&x))
- s.Data = unsafe.Pointer(uintptr(base) + uintptr(beg)*typ.elem.Size())
+ s.Data = uintptr(base) + uintptr(beg)*typ.elem.Size()
s.Len = end - beg
s.Cap = cap - beg
// StringHeader is the runtime representation of a string.
// It cannot be used safely or portably.
type StringHeader struct {
- Data unsafe.Pointer
+ Data uintptr
Len int
}
// SliceHeader is the runtime representation of a slice.
// It cannot be used safely or portably.
type SliceHeader struct {
- Data unsafe.Pointer
+ Data uintptr
Len int
Cap int
}
// Reinterpret as *SliceHeader to edit.
s := (*SliceHeader)(unsafe.Pointer(&x))
- s.Data = unsafe_NewArray(typ.Elem().(*rtype), cap)
+ s.Data = uintptr(unsafe_NewArray(typ.Elem().(*rtype), cap))
s.Len = len
s.Cap = cap