Files
tinygo/src/runtime/print.go
T
Ayke van Laethem 62c4c5e90b go fmt
2018-08-17 23:23:20 +02:00

108 lines
1.6 KiB
Go

package runtime
import (
"unsafe"
)
func printstring(s string) {
for i := 0; i < len(s); i++ {
putchar(s[i])
}
}
func printuint8(n uint8) {
if TargetBits >= 32 {
printuint32(uint32(n))
} else {
prevdigits := n / 10
if prevdigits != 0 {
printuint8(prevdigits)
}
putchar(byte((n % 10) + '0'))
}
}
func printint8(n int8) {
if TargetBits >= 32 {
printint32(int32(n))
} else {
if n < 0 {
putchar('-')
n = -n
}
printuint8(uint8(n))
}
}
func printuint32(n uint32) {
// TODO: don't recurse, but still be compact (and don't divide/mod
// more than necessary).
prevdigits := n / 10
if prevdigits != 0 {
printuint32(prevdigits)
}
putchar(byte((n % 10) + '0'))
}
func printint32(n int32) {
// Print integer in signed big-endian base-10 notation, for humans to
// read.
if n < 0 {
putchar('-')
n = -n
}
printuint32(uint32(n))
}
func printuint64(n uint64) {
prevdigits := n / 10
if prevdigits != 0 {
printuint64(prevdigits)
}
putchar(byte((n % 10) + '0'))
}
func printint64(n int64) {
if n < 0 {
putchar('-')
n = -n
}
printuint64(uint64(n))
}
func printbyte(c uint8) {
putchar(c)
}
func printspace() {
putchar(' ')
}
func printnl() {
putchar('\r')
putchar('\n')
}
func printitf(msg interface{}) {
switch msg := msg.(type) {
case string:
print(msg)
default:
print("???")
}
}
func printptr(ptr uintptr) {
putchar('0')
putchar('x')
for i := 0; i < int(unsafe.Sizeof(ptr))*2; i++ {
nibble := byte(ptr >> (unsafe.Sizeof(ptr)*8 - 4))
if nibble < 10 {
putchar(nibble + '0')
} else {
putchar(nibble - 10 + 'a')
}
ptr <<= 4
}
}