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(, )
= [:]
}
return
}
func ( *tmpBuf, , string) string {
return concatstrings(, []string{, })
}
func ( *tmpBuf, , , string) string {
return concatstrings(, []string{, , })
}
func ( *tmpBuf, , , , string) string {
return concatstrings(, []string{, , , })
}
func ( *tmpBuf, , , , , string) string {
return concatstrings(, []string{, , , , })
}
func ( []string) []byte {
:= 0
for , := range {
:= len()
if + < {
throw("string concatenation too long")
}
+=
}
if == 0 {
return []byte{}
}
:= rawbyteslice()
:= 0
for , := range {
copy([:], )
+= len()
}
return
}
func (, string) []byte {
return concatbytes([]string{, })
}
func (, , string) []byte {
return concatbytes([]string{, , })
}
func (, , , string) []byte {
return concatbytes([]string{, , , })
}
func (, , , , string) []byte {
return concatbytes([]string{, , , , })
}
func ( *tmpBuf, *byte, int) string {
if == 0 {
return ""
}
if raceenabled {
racereadrangepc(unsafe.Pointer(),
uintptr(),
sys.GetCallerPC(),
abi.FuncPCABIInternal())
}
if msanenabled {
msanread(unsafe.Pointer(), uintptr())
}
if asanenabled {
asanread(unsafe.Pointer(), uintptr())
}
if == 1 {
:= unsafe.Pointer(&staticuint64s[*])
if goarch.BigEndian {
= add(, 7)
}
return unsafe.String((*byte)(), 1)
}
var unsafe.Pointer
if != nil && <= len() {
= unsafe.Pointer()
} else {
= mallocgc(uintptr(), nil, false)
}
memmove(, unsafe.Pointer(), uintptr())
return unsafe.String((*byte)(), )
}
func ( string) bool {
:= uintptr(unsafe.Pointer(unsafe.StringData()))
:= 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(),
sys.GetCallerPC(),
abi.FuncPCABIInternal())
}
if msanenabled && > 0 {
msanread(unsafe.Pointer(), uintptr())
}
if asanenabled && > 0 {
asanread(unsafe.Pointer(), uintptr())
}
return unsafe.String(, )
}
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]),
sys.GetCallerPC(),
abi.FuncPCABIInternal())
}
if msanenabled && len() > 0 {
msanread(unsafe.Pointer(&[0]), uintptr(len())*unsafe.Sizeof([0]))
}
if asanenabled && len() > 0 {
asanread(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)
return unsafe.String((*byte)(), ), unsafe.Slice((*byte)(), )
}
func ( int) ( []byte) {
:= roundupsize(uintptr(), true)
:= 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, true)
:= 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) string {
return gostring()
}
func ( *byte, int) string {
if == 0 {
return ""
}
, := rawstring()
memmove(unsafe.Pointer(&[0]), unsafe.Pointer(), uintptr())
return
}
const (
maxUint64 = ^uint64(0)
maxInt64 = int64(maxUint64 >> 1)
)
func ( string) (int64, bool) {
if == "" {
return 0, false
}
:= false
if [0] == '-' {
= true
= [1:]
}
:= uint64(0)
for := 0; < len(); ++ {
:= []
if < '0' || > '9' {
return 0, false
}
if > maxUint64/10 {
return 0, false
}
*= 10
:= + uint64() - '0'
if < {
return 0, false
}
=
}
if ! && > uint64(maxInt64) {
return 0, false
}
if && > uint64(maxInt64)+1 {
return 0, false
}
:= int64()
if {
= -
}
return , true
}
func ( string) (int, bool) {
if , := atoi64(); == int64(int()) {
return int(),
}
return 0, false
}
func ( string) (int32, bool) {
if , := atoi64(); == int64(int32()) {
return int32(),
}
return 0, false
}
func ( string) (int64, bool) {
if == "" {
return 0, false
}
:= [len()-1]
if >= '0' && <= '9' {
, := atoi64()
if ! || < 0 {
return 0, false
}
return ,
}
if != 'B' || len() < 2 {
return 0, false
}
if := [len()-2]; >= '0' && <= '9' {
, := atoi64([:len()-1])
if ! || < 0 {
return 0, false
}
return ,
} else if != 'i' {
return 0, false
}
if len() < 4 {
return 0, false
}
:= 0
switch [len()-3] {
case 'K':
= 1
case 'M':
= 2
case 'G':
= 3
case 'T':
= 4
default:
return 0, false
}
:= uint64(1)
for := 0; < ; ++ {
*= 1024
}
, := atoi64([:len()-3])
if ! || < 0 {
return 0, false
}
:= uint64()
if > maxUint64/ {
return 0, false
}
*=
if > uint64(maxInt64) {
return 0, false
}
return int64(), true
}
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 [:]
}