summaryrefslogtreecommitdiff
path: root/src/pkg/reflect/value.go
diff options
context:
space:
mode:
authorJan Ziak <0xe2.0x9a.0x9b@gmail.com>2013-04-07 23:33:40 +0200
committerJan Ziak <0xe2.0x9a.0x9b@gmail.com>2013-04-07 23:33:40 +0200
commitea9648a657356daf39f59a5934b8e4ecc4d39d16 (patch)
treefd077816ba37e0f1a04953f3131364bf188f7c8c /src/pkg/reflect/value.go
parent50ec0a3abfe818405d2621242f70982a1b3b561e (diff)
downloadgo-ea9648a657356daf39f59a5934b8e4ecc4d39d16.tar.gz
reflect: use unsafe.Pointer in StringHeader and SliceHeader
Relates to issue 5193. R=r CC=golang-dev https://codereview.appspot.com/8363045
Diffstat (limited to 'src/pkg/reflect/value.go')
-rw-r--r--src/pkg/reflect/value.go16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/pkg/reflect/value.go b/src/pkg/reflect/value.go
index 5a3720489..b303465a2 100644
--- a/src/pkg/reflect/value.go
+++ b/src/pkg/reflect/value.go
@@ -910,7 +910,7 @@ func (v Value) Index(i int) Value {
tt := (*sliceType)(unsafe.Pointer(v.typ))
typ := tt.elem
fl |= flag(typ.Kind()) << flagKindShift
- val := unsafe.Pointer(s.Data + uintptr(i)*typ.size)
+ val := unsafe.Pointer(uintptr(s.Data) + uintptr(i)*typ.size)
return Value{typ, val, fl}
case String:
@@ -919,7 +919,7 @@ func (v Value) Index(i int) Value {
if i < 0 || i >= s.Len {
panic("reflect: string index out of range")
}
- val := *(*byte)(unsafe.Pointer(s.Data + uintptr(i)))
+ val := *(*byte)(unsafe.Pointer(uintptr(s.Data) + uintptr(i)))
return Value{uint8Type, unsafe.Pointer(uintptr(val)), fl}
}
panic(&ValueError{"reflect.Value.Index", k})
@@ -1310,7 +1310,7 @@ func (v Value) Pointer() uintptr {
return uintptr(p)
case Slice:
- return (*SliceHeader)(v.val).Data
+ return uintptr((*SliceHeader)(v.val).Data)
}
panic(&ValueError{"reflect.Value.Pointer", k})
}
@@ -1565,7 +1565,7 @@ func (v Value) Slice(beg, end int) Value {
}
var x string
val := (*StringHeader)(unsafe.Pointer(&x))
- val.Data = s.Data + uintptr(beg)
+ val.Data = unsafe.Pointer(uintptr(s.Data) + uintptr(beg))
val.Len = end - beg
return Value{v.typ, unsafe.Pointer(&x), v.flag}
}
@@ -1579,7 +1579,7 @@ func (v Value) Slice(beg, end int) Value {
// Reinterpret as *SliceHeader to edit.
s := (*SliceHeader)(unsafe.Pointer(&x))
- s.Data = uintptr(base) + uintptr(beg)*typ.elem.Size()
+ s.Data = unsafe.Pointer(uintptr(base) + uintptr(beg)*typ.elem.Size())
s.Len = end - beg
s.Cap = cap - beg
@@ -1701,14 +1701,14 @@ func (v Value) UnsafeAddr() uintptr {
// StringHeader is the runtime representation of a string.
// It cannot be used safely or portably.
type StringHeader struct {
- Data uintptr
+ Data unsafe.Pointer
Len int
}
// SliceHeader is the runtime representation of a slice.
// It cannot be used safely or portably.
type SliceHeader struct {
- Data uintptr
+ Data unsafe.Pointer
Len int
Cap int
}
@@ -1988,7 +1988,7 @@ func MakeSlice(typ Type, len, cap int) Value {
// Reinterpret as *SliceHeader to edit.
s := (*SliceHeader)(unsafe.Pointer(&x))
- s.Data = uintptr(unsafe_NewArray(typ.Elem().(*rtype), cap))
+ s.Data = unsafe_NewArray(typ.Elem().(*rtype), cap)
s.Len = len
s.Cap = cap