diff options
| author | Michael Hudson-Doyle <michael.hudson@canonical.com> | 2015-04-11 10:01:54 +1200 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2015-04-15 16:59:49 +0000 |
| commit | ab4df700b841fcd9a5d249b77c547bad9574d948 (patch) | |
| tree | d6edc85b7486f5cb33bdc4f9bbff2d77a26a97d5 /src/runtime/string.go | |
| parent | f7be77e5b61706b6264367c43b78a9a4a93f8f3a (diff) | |
| download | go-ab4df700b841fcd9a5d249b77c547bad9574d948.tar.xz | |
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 <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/string.go')
| -rw-r--r-- | src/runtime/string.go | 14 |
1 files changed, 4 insertions, 10 deletions
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 } |
