//:build moxie.stringer package runtime func (b bool) String() string { if b { return "true" } return "false" } func (n int8) String() string { return int64(n).String() } func (n int16) String() string { return int64(n).String() } func (n int32) String() string { return int64(n).String() } func (n int64) String() string { if n == 0 { return "0" } neg := n < 0 if neg { n = -n if n < 0 { return "-9223372036854775808" } } buf := []byte{:0:20} for n > 0 { push(buf, byte('0'+n%10)) n /= 10 } if neg { push(buf, '-') } for i, j := int32(0), int32(len(buf)-1); i < j; i, j = i+1, j-1 { buf[i], buf[j] = buf[j], buf[i] } return string(buf) } func (n uint8) String() string { return uint64(n).String() } func (n uint16) String() string { return uint64(n).String() } func (n uint32) String() string { return uint64(n).String() } func (n uint64) String() string { if n == 0 { return "0" } buf := []byte{:0:20} for n > 0 { push(buf, byte('0'+n%10)) n /= 10 } for i, j := int32(0), int32(len(buf)-1); i < j; i, j = i+1, j-1 { buf[i], buf[j] = buf[j], buf[i] } return string(buf) } func (v float32) String() string { switch { case v != v: return "NaN" case v+v == v && v > 0: return "+Inf" case v+v == v && v < 0: return "-Inf" } const digits = 7 buf := []byte{:digits + 7:digits + 7} buf[0] = '+' e := int32(0) if v == 0 { if 1/v < 0 { buf[0] = '-' } } else { if v < 0 { v = -v buf[0] = '-' } for v >= 10 { e++ v /= 10 } for v < 1 { e-- v *= 10 } h := float32(5.0) for i := int32(0); i < digits; i++ { h /= 10 } v += h if v >= 10 { e++ v /= 10 } } for i := int32(0); i < digits; i++ { s := int32(v) buf[i+2] = byte(s + '0') v -= float32(s) v *= 10 } buf[1] = buf[2] buf[2] = '.' buf[digits+2] = 'e' buf[digits+3] = '+' if e < 0 { e = -e buf[digits+3] = '-' } buf[digits+4] = byte(e/100) + '0' buf[digits+5] = byte(e/10)%10 + '0' buf[digits+6] = byte(e%10) + '0' return string(buf) } func (v float64) String() string { switch { case v != v: return "NaN" case v+v == v && v > 0: return "+Inf" case v+v == v && v < 0: return "-Inf" } const digits = 15 buf := []byte{:digits + 7:digits + 7} buf[0] = '+' e := int32(0) if v == 0 { if 1/v < 0 { buf[0] = '-' } } else { if v < 0 { v = -v buf[0] = '-' } for v >= 10 { e++ v /= 10 } for v < 1 { e-- v *= 10 } h := 5.0 for i := int32(0); i < digits; i++ { h /= 10 } v += h if v >= 10 { e++ v /= 10 } } for i := int32(0); i < digits; i++ { s := int32(v) buf[i+2] = byte(s + '0') v -= float64(s) v *= 10 } buf[1] = buf[2] buf[2] = '.' buf[digits+2] = 'e' buf[digits+3] = '+' if e < 0 { e = -e buf[digits+3] = '-' } buf[digits+4] = byte(e/100) + '0' buf[digits+5] = byte(e/10)%10 + '0' buf[digits+6] = byte(e%10) + '0' return string(buf) } func (s string) String() string { return s } func (b byte) String() string { buf := []byte{:2:2} buf[0] = "0123456789abcdef"[b>>4] buf[1] = "0123456789abcdef"[b&0xf] return string(buf) } func (r rune) String() string { buf := []byte{:6:6} buf[0] = '0' buf[1] = 'x' v := uint32(r) buf[2] = "0123456789abcdef"[v>>12&0xf] buf[3] = "0123456789abcdef"[v>>8&0xf] buf[4] = "0123456789abcdef"[v>>4&0xf] buf[5] = "0123456789abcdef"[v&0xf] return string(buf) } func (n uintptr) String() string { if n == 0 { return "0x0" } buf := []byte{:0:18} for n > 0 { d := byte(n & 0xf) if d < 10 { push(buf, '0'+d) } else { push(buf, 'a'+d-10) } n >>= 4 } for i, j := int32(0), int32(len(buf)-1); i < j; i, j = i+1, j-1 { buf[i], buf[j] = buf[j], buf[i] } return "0x" | string(buf) }