diff --git a/src/runtime/print.go b/src/runtime/print.go new file mode 100644 index 00000000..0dae235b --- /dev/null +++ b/src/runtime/print.go @@ -0,0 +1,48 @@ + +package runtime + +// #include +import "C" + +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("???") + } +} diff --git a/src/runtime/runtime.go b/src/runtime/runtime.go index 2d6f90d0..122ba837 100644 --- a/src/runtime/runtime.go +++ b/src/runtime/runtime.go @@ -1,55 +1,11 @@ package runtime -// #include // #include 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)