package runtime
import (
)
const tmpStringBufSize = 32
type tmpBuf [tmpStringBufSize]byte
func ( *tmpBuf, []string) string {
:= 0
:= 0
:= 0
for , := range {
:= len()
if == 0 {
continue
}
if + < {
throw("string concatenation too long")
}
+=
++
=
}
if == 0 {
return ""
}
if == 1 && ( != nil || !stringDataOnStack([])) {
return []
}
, := rawstringtmp(, )
for , := range {
copy(, )
= [len():]
}
return
}
func ( *tmpBuf, [2]string) string {
return concatstrings(, [:])
}
func ( *tmpBuf, [3]string) string {
return concatstrings(, [:])
}
func ( *tmpBuf, [4]string) string {
return concatstrings(, [:])
}
func ( *tmpBuf, [5]string) string {
return concatstrings(, [:])
}
func ( *tmpBuf, *byte, int) ( string) {
if == 0 {
return ""
}
if raceenabled {
racereadrangepc(unsafe.Pointer(),
uintptr(),
getcallerpc(),
funcPC())
}
if msanenabled {
msanread(unsafe.Pointer(), uintptr())
}
if == 1 {
:= unsafe.Pointer(&staticuint64s[*])
if sys.BigEndian {
= add(, 7)
}
stringStructOf(&).str =
stringStructOf(&).len = 1
return
}
var unsafe.Pointer
if != nil && <= len() {
= unsafe.Pointer()
} else {
= mallocgc(uintptr(), nil, false)
}
stringStructOf(&).str =
stringStructOf(&).len =
memmove(, unsafe.Pointer(), uintptr())
return
}
func ( string) bool {
:= uintptr(stringStructOf(&).str)
:= getg().stack
return .lo <= && < .hi
}
func ( *tmpBuf, int) ( string, []byte) {
if != nil && <= len() {
= [:]
= slicebytetostringtmp(&[0], len())
} else {
, = rawstring()
}
return
}
func ( *byte, int) ( string) {
if raceenabled && > 0 {
racereadrangepc(unsafe.Pointer(),
uintptr(),
getcallerpc(),
funcPC())
}
if msanenabled && > 0 {
msanread(unsafe.Pointer(), uintptr())
}
stringStructOf(&).str = unsafe.Pointer()
stringStructOf(&).len =
return
}
func ( *tmpBuf, string) []byte {
var []byte
if != nil && len() <= len() {
* = tmpBuf{}
= [:len()]
} else {
= rawbyteslice(len())
}
copy(, )
return
}
func ( *[tmpStringBufSize]rune, string) []rune {
:= 0
for range {
++
}
var []rune
if != nil && <= len() {
* = [tmpStringBufSize]rune{}
= [:]
} else {
= rawruneslice()
}
= 0
for , := range {
[] =
++
}
return
}
func ( *tmpBuf, []rune) string {
if raceenabled && len() > 0 {
racereadrangepc(unsafe.Pointer(&[0]),
uintptr(len())*unsafe.Sizeof([0]),
getcallerpc(),
funcPC())
}
if msanenabled && len() > 0 {
msanread(unsafe.Pointer(&[0]), uintptr(len())*unsafe.Sizeof([0]))
}
var [4]byte
:= 0
for , := range {
+= encoderune([:], )
}
, := rawstringtmp(, +3)
:= 0
for , := range {
if >= {
break
}
+= encoderune([:], )
}
return [:]
}
type stringStruct struct {
str unsafe.Pointer
len int
}
type stringStructDWARF struct {
str *byte
len int
}
func ( *string) *stringStruct {
return (*stringStruct)(unsafe.Pointer())
}
func ( *[4]byte, int64) ( string) {
var []byte
if != nil {
= [:]
= slicebytetostringtmp(&[0], len())
} else {
, = rawstring(4)
}
if int64(rune()) != {
= runeError
}
:= encoderune(, rune())
return [:]
}
func ( int) ( string, []byte) {
:= mallocgc(uintptr(), nil, false)
stringStructOf(&).str =
stringStructOf(&).len =
*(*slice)(unsafe.Pointer(&)) = slice{, , }
return
}
func ( int) ( []byte) {
:= roundupsize(uintptr())
:= mallocgc(, nil, false)
if != uintptr() {
memclrNoHeapPointers(add(, uintptr()), -uintptr())
}
*(*slice)(unsafe.Pointer(&)) = slice{, , int()}
return
}
func ( int) ( []rune) {
if uintptr() > maxAlloc/4 {
throw("out of memory")
}
:= roundupsize(uintptr() * 4)
:= mallocgc(, nil, false)
if != uintptr()*4 {
memclrNoHeapPointers(add(, uintptr()*4), -uintptr()*4)
}
*(*slice)(unsafe.Pointer(&)) = slice{, , int( / 4)}
return
}
func ( *byte, int) ( []byte) {
if == 0 {
return make([]byte, 0)
}
if < 0 || uintptr() > maxAlloc {
panic(errorString("gobytes: length out of range"))
}
:= mallocgc(uintptr(), nil, false)
memmove(, unsafe.Pointer(), uintptr())
*(*slice)(unsafe.Pointer(&)) = slice{, , }
return
}
func ( *byte) string {
:= findnull()
if == 0 {
return ""
}
, := rawstring()
memmove(unsafe.Pointer(&[0]), unsafe.Pointer(), uintptr())
return
}
func ( *byte, int) string {
if == 0 {
return ""
}
, := rawstring()
memmove(unsafe.Pointer(&[0]), unsafe.Pointer(), uintptr())
return
}
func (, string) bool {
return len() >= len() && [:len()] ==
}
const (
maxUint = ^uint(0)
maxInt = int(maxUint >> 1)
)
func ( string) (int, bool) {
if == "" {
return 0, false
}
:= false
if [0] == '-' {
= true
= [1:]
}
:= uint(0)
for := 0; < len(); ++ {
:= []
if < '0' || > '9' {
return 0, false
}
if > maxUint/10 {
return 0, false
}
*= 10
:= + uint() - '0'
if < {
return 0, false
}
=
}
if ! && > uint(maxInt) {
return 0, false
}
if && > uint(maxInt)+1 {
return 0, false
}
:= int()
if {
= -
}
return , true
}
func ( string) (int32, bool) {
if , := atoi(); == int(int32()) {
return int32(),
}
return 0, false
}
func ( *byte) int {
if == nil {
return 0
}
if GOOS == "plan9" {
:= (*[maxAlloc/2 - 1]byte)(unsafe.Pointer())
:= 0
for [] != 0 {
++
}
return
}
const = 4096
:= 0
:= unsafe.Pointer()
:= int( - uintptr()%)
for {
:= *(*string)(unsafe.Pointer(&stringStruct{, }))
if := bytealg.IndexByteString(, 0); != -1 {
return +
}
= unsafe.Pointer(uintptr() + uintptr())
+=
=
}
}
func ( *uint16) int {
if == nil {
return 0
}
:= (*[maxAlloc/2/2 - 1]uint16)(unsafe.Pointer())
:= 0
for [] != 0 {
++
}
return
}
func ( *byte) string {
:= stringStruct{str: unsafe.Pointer(), len: findnull()}
:= *(*string)(unsafe.Pointer(&))
return
}
func ( *uint16) string {
var [8]byte
:= (*[maxAlloc/2/2 - 1]uint16)(unsafe.Pointer())
:= 0
for := 0; [] != 0; ++ {
+= encoderune([:], rune([]))
}
, := rawstring( + 4)
:= 0
for := 0; [] != 0; ++ {
if >= {
break
}
+= encoderune([:], rune([]))
}
[] = 0
return [:]
}