tinygo/src/runtime/runtime.go
2018-04-21 01:03:05 +02:00

67 строки
1,1 КиБ
Go

package runtime
// #include <stdio.h>
// #include <stdlib.h>
import "C"
const Compiler = "tgo"
func printstring(s string) {
for i := 0; i < len(s); i++ {
C.putchar(C.int(s[i]))
}
}
func printint(n int) {
// Print integer in signed big-endian base-10 notation, for humans to
// read.
// TODO: don't recurse, but still be compact (and don't divide/mod
// more than necessary).
if n < 0 {
C.putchar('-')
n = -n
}
prevdigits := n / 10
if prevdigits != 0 {
printint(prevdigits)
}
C.putchar(C.int((n % 10) + '0'))
}
func printbyte(c uint8) {
C.putchar(C.int(c))
}
func printspace() {
C.putchar(' ')
}
func printnl() {
C.putchar('\n')
}
func printitf(msg interface{}) {
switch msg := msg.(type) {
case string:
print(msg)
default:
print("???")
}
}
func _panic(message interface{}) {
printstring("panic: ")
printitf(message)
printnl()
C.exit(1)
}
func boundsCheck(outOfRange bool) {
if outOfRange {
// printstring() here is safe as this function is excluded from bounds
// checking.
printstring("panic: runtime error: index out of range\n")
C.exit(1)
}
}