diff options
author | Jan Ziak <0xe2.0x9a.0x9b@gmail.com> | 2013-04-07 23:33:40 +0200 |
---|---|---|
committer | Jan Ziak <0xe2.0x9a.0x9b@gmail.com> | 2013-04-07 23:33:40 +0200 |
commit | ea9648a657356daf39f59a5934b8e4ecc4d39d16 (patch) | |
tree | fd077816ba37e0f1a04953f3131364bf188f7c8c /src/pkg/reflect | |
parent | 50ec0a3abfe818405d2621242f70982a1b3b561e (diff) | |
download | go-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')
-rw-r--r-- | src/pkg/reflect/value.go | 16 |
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 |