support print(int)

This commit is contained in:
Ayke van Laethem
2018-04-12 15:19:20 +02:00
parent e1b04abd46
commit 2478bb71f9
3 changed files with 29 additions and 2 deletions
+21 -2
View File
@@ -4,16 +4,35 @@
#include <stdio.h>
#include "runtime.h"
#define print(buf, len) write(STDOUT_FILENO, buf, len)
void __go_printstring(string_t *str) {
write(STDOUT_FILENO, str->buf, str->len);
}
void __go_printint(int32_t n) {
// 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) {
print("-", 1);
n = -n;
}
int32_t prevdigits = n / 10;
if (prevdigits != 0) {
__go_printint(prevdigits);
}
char buf[1] = {(n % 10) + '0'};
print(buf, 1);
}
void __go_printspace() {
write(STDOUT_FILENO, " ", 1);
print(" ", 1);
}
void __go_printnl() {
write(STDOUT_FILENO, "\n", 1);
print("\n", 1);
}
void go_main() __asm__("main.main");