From ab4df700b841fcd9a5d249b77c547bad9574d948 Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Sat, 11 Apr 2015 10:01:54 +1200 Subject: runtime: merge slice and sliceStruct By removing type slice, renaming type sliceStruct to type slice and whacking until it compiles. Has a pleasing net reduction of conversions. Fixes #10188 Change-Id: I77202b8df637185b632fd7875a1fdd8d52c7a83c Reviewed-on: https://go-review.googlesource.com/8770 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/runtime/string.go | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'src/runtime/string.go') diff --git a/src/runtime/string.go b/src/runtime/string.go index 0ba309cf02..a5851b7abc 100644 --- a/src/runtime/string.go +++ b/src/runtime/string.go @@ -148,7 +148,7 @@ func stringtoslicebytetmp(s string) []byte { // for i, c := range []byte(str) str := (*stringStruct)(unsafe.Pointer(&s)) - ret := slice{array: (*byte)(str.str), len: uint(str.len), cap: uint(str.len)} + ret := slice{array: unsafe.Pointer(str.str), len: str.len, cap: str.len} return *(*[]byte)(unsafe.Pointer(&ret)) } @@ -266,9 +266,7 @@ func rawstring(size int) (s string, b []byte) { (*stringStruct)(unsafe.Pointer(&s)).str = p (*stringStruct)(unsafe.Pointer(&s)).len = size - (*slice)(unsafe.Pointer(&b)).array = (*uint8)(p) - (*slice)(unsafe.Pointer(&b)).len = uint(size) - (*slice)(unsafe.Pointer(&b)).cap = uint(size) + *(*slice)(unsafe.Pointer(&b)) = slice{p, size, size} for { ms := maxstring @@ -286,9 +284,7 @@ func rawbyteslice(size int) (b []byte) { memclr(add(p, uintptr(size)), cap-uintptr(size)) } - (*slice)(unsafe.Pointer(&b)).array = (*uint8)(p) - (*slice)(unsafe.Pointer(&b)).len = uint(size) - (*slice)(unsafe.Pointer(&b)).cap = uint(cap) + *(*slice)(unsafe.Pointer(&b)) = slice{p, size, int(cap)} return } @@ -303,9 +299,7 @@ func rawruneslice(size int) (b []rune) { memclr(add(p, uintptr(size)*4), mem-uintptr(size)*4) } - (*slice)(unsafe.Pointer(&b)).array = (*uint8)(p) - (*slice)(unsafe.Pointer(&b)).len = uint(size) - (*slice)(unsafe.Pointer(&b)).cap = uint(mem / 4) + *(*slice)(unsafe.Pointer(&b)) = slice{p, size, int(mem / 4)} return } -- cgit v1.3-5-g9baa