aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/string.go
diff options
context:
space:
mode:
authorMichael Hudson-Doyle <michael.hudson@canonical.com>2015-04-11 10:01:54 +1200
committerIan Lance Taylor <iant@golang.org>2015-04-15 16:59:49 +0000
commitab4df700b841fcd9a5d249b77c547bad9574d948 (patch)
treed6edc85b7486f5cb33bdc4f9bbff2d77a26a97d5 /src/runtime/string.go
parentf7be77e5b61706b6264367c43b78a9a4a93f8f3a (diff)
downloadgo-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.go14
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
}