return bh__print_string(str, n, walker);
}
+isize bh__printf64(char* str, isize n, f64 value) {
+ fori (i, 0, 6) value *= 10.0;
+ i64 v = (i64) value;
+
+ isize l1 = bh__printi64(str, n, ((bh__print_format) { .base = 10 }), v / 1000000);
+ str += l1;
+ n -= l1;
+
+ *str = '.';
+ str += 1;
+ n -= 1;
+
+ isize l2 = bh__printi64(str, n, ((bh__print_format) { .base = 10 }), bh_abs(v) % 1000000);
+
+ return l1 + l2 + 1;
+}
+
// TODO: This is very hacked together but for now it will work.
isize bh_snprintf_va(char *str, isize n, char const *fmt, va_list va) {
char const *text_start = str;
len = bh__print_string(str, bh_min(l, n), s);
} break;
+ case 'f': {
+ f64 f = va_arg(va, f64);
+ len = bh__printf64(str, n, f);
+ } break;
+
default: fmt--;
}
// 'if' <expr> <stmt> ('elseif' <cond> <stmt>)* ('else' <block>)?
static AstIfWhile* parse_if_stmt(OnyxParser* parser) {
- expect_token(parser, Token_Type_Keyword_If);
-
AstIfWhile* if_node = make_node(AstIfWhile, Ast_Kind_If);
+ if_node->token = expect_token(parser, Token_Type_Keyword_If);
+
AstIfWhile* root_if = if_node;
if ((parser->curr + 1)->type == ':') {