From 4d35dd69de4608f792db0047bd60cab71cf4d249 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 20 May 2020 22:27:50 -0500 Subject: [PATCH] Made custom printf good enough to replace stdio printf for now (lots of missing functionality) --- bh.h | 209 ++++++++++++++++++++++++++++++++++++--------------- onyx | Bin 71424 -> 75792 bytes onyx.c | 4 +- onyxmsgs.c | 8 +- onyxparser.c | 1 - 5 files changed, 153 insertions(+), 69 deletions(-) diff --git a/bh.h b/bh.h index 556f3f86..095abcd6 100644 --- a/bh.h +++ b/bh.h @@ -6,7 +6,6 @@ #include #include -#include // TODO: Replace with custom implementation of printf #include #include #include // TODO: Replace with needed functions @@ -37,49 +36,6 @@ typedef void* ptr; -//------------------------------------------------------------------------------------- -// Better debug functions -//------------------------------------------------------------------------------------- -#ifdef BH_DEBUG - -void* bh__debug_malloc(size_t size, const char* file, u64 line); -void* bh__debug_aligned_alloc(size_t size, size_t alignment, const char* file, u64 line); -void bh__debug_free(void* ptr, const char* file, u64 line); -void* bh__debug_realloc(void* ptr, size_t size, const char* file, u64 line); - -#ifdef BH_DEFINE - -void* bh__debug_malloc(size_t size, const char* file, u64 line) { - void* p = malloc(size); - printf("[DEBUG] %p = malloc(%ld) at %s:%ld\n", p, size, file, line); - return p; -} - -void* bh__debug_aligned_alloc(size_t size, size_t alignment, const char* file, u64 line) { - void* p = aligned_alloc(size, alignment); - printf("[DEBUG] %p = aligned_alloc(%ld, %ld) at %s:%ld\n", p, alignment, size, file, line); - return p; -} - -void bh__debug_free(void* ptr, const char* file, u64 line) { - printf("[DEBUG] free(%p) at %s:%ld\n", ptr, file, line); - free(ptr); -} - -void* bh__debug_realloc(void* ptr, size_t size, const char* file, u64 line) { - void* p = realloc(ptr, size); - printf("[DEBUG] %p = realloc(%p, %ld) at %s:%ld\n", p, ptr, size, file, line); - return p; -} - -#endif - -#define malloc(size) (bh__debug_malloc(size, __FILE__, __LINE__)) -#define aligned_alloc(size, alignment) (bh__debug_aligned_alloc(size, alignment, __FILE__, __LINE__)) -#define free(ptr) (bh__debug_free(ptr, __FILE__, __LINE__)) -#define realloc(ptr, size) (bh__debug_realloc(ptr, size, __FILE__, __LINE__)) - -#endif @@ -391,12 +347,9 @@ i32 bh_file_contents_delete(bh_file_contents* contents); // %p - pointers // %% - literal % -enum bh__print_format { - BH__PRINT_FORMAT_DECIMAL = BH_BIT(0), - BH__PRINT_FORMAT_OCTAL = BH_BIT(1), - BH__PRINT_FORMAT_HEXADECIMAL = BH_BIT(2), - BH__PRINT_FORMAT_UNSIGNED = BH_BIT(3), -}; +typedef struct bh__print_format { + u32 base; +} bh__print_format; isize bh_printf(char const *fmt, ...); isize bh_printf_va(char const *fmt, va_list va); @@ -416,6 +369,62 @@ isize bh_snprintf_va(char *str, isize n, char const *fmt, va_list va); +//------------------------------------------------------------------------------------- +// Better debug functions +//------------------------------------------------------------------------------------- +#ifdef BH_DEBUG + +void* bh__debug_malloc(size_t size, const char* file, u64 line); +void* bh__debug_aligned_alloc(size_t size, size_t alignment, const char* file, u64 line); +void bh__debug_free(void* ptr, const char* file, u64 line); +void* bh__debug_realloc(void* ptr, size_t size, const char* file, u64 line); + +#ifdef BH_DEFINE + +void* bh__debug_malloc(size_t size, const char* file, u64 line) { + void* p = malloc(size); + bh_printf("[DEBUG] %p = malloc(%d) at %s:%d\n", p, size, file, line); + return p; +} + +void* bh__debug_aligned_alloc(size_t size, size_t alignment, const char* file, u64 line) { + void* p = aligned_alloc(size, alignment); + bh_printf("[DEBUG] %p = aligned_alloc(%d, %d) at %s:%d\n", p, alignment, size, file, line); + return p; +} + +void bh__debug_free(void* ptr, const char* file, u64 line) { + bh_printf("[DEBUG] free(%p) at %s:%d\n", ptr, file, line); + free(ptr); +} + +void* bh__debug_realloc(void* ptr, size_t size, const char* file, u64 line) { + void* p = realloc(ptr, size); + bh_printf("[DEBUG] %p = realloc(%p, %d) at %s:%d\n", p, ptr, size, file, line); + return p; +} + +#endif + +#define malloc(size) (bh__debug_malloc(size, __FILE__, __LINE__)) +#define aligned_alloc(size, alignment) (bh__debug_aligned_alloc(size, alignment, __FILE__, __LINE__)) +#define free(ptr) (bh__debug_free(ptr, __FILE__, __LINE__)) +#define realloc(ptr, size) (bh__debug_realloc(ptr, size, __FILE__, __LINE__)) + +#endif + + + + + + + + + + + + + @@ -781,7 +790,7 @@ BH_ALLOCATOR_PROC(bh_arena_allocator_proc) { bh__arena_internal* new_arena = (bh__arena_internal *) bh_alloc(alloc_arena->backing, alloc_arena->arena_size); if (new_arena == NULL) { - fprintf(stderr, "Arena Allocator: couldn't allocate new arena"); + bh_printf_err("Arena Allocator: couldn't allocate new arena"); return NULL; } @@ -1291,26 +1300,84 @@ isize bh__print_string(char* dest, isize n, char* src) { return len; } -isize bh__printi64(char* str, isize n, enum bh__print_format format, i32 value) { - char buf[130]; - buf[129] = 0; - char* walker = buf + 129; +isize bh__printu64(char* str, isize n, bh__print_format format, u64 value) { + char buf[128]; + buf[127] = 0; + char* walker = buf + 127; + u32 base = format.base ? format.base : 10, tmp; while (value > 0) { - *--walker = '0' + (value % 10); - value /= 10; + tmp = value % base; + if (tmp > 9) { + switch (tmp) { + case 10: tmp = 'a'; break; + case 11: tmp = 'b'; break; + case 12: tmp = 'c'; break; + case 13: tmp = 'd'; break; + case 14: tmp = 'e'; break; + case 15: tmp = 'f'; break; + } + } else { + tmp += '0'; + } + + *--walker = tmp; + value /= base; + } + + if (format.base == 16) { + *--walker = 'x'; + *--walker = '0'; } return bh__print_string(str, n, walker); } +isize bh__printi64(char* str, isize n, bh__print_format format, i64 value) { + char buf[128]; + buf[127] = 0; + char* walker = buf + 127; + b32 negative = value < 0; + u32 base = format.base ? format.base : 10, tmp; + + while (value > 0) { + tmp = value % base; + if (tmp > 9) { + switch (tmp) { + case 10: tmp = 'a'; break; + case 11: tmp = 'b'; break; + case 12: tmp = 'c'; break; + case 13: tmp = 'd'; break; + case 14: tmp = 'e'; break; + case 15: tmp = 'f'; break; + } + } else { + tmp += '0'; + } + + *--walker = tmp; + value /= base; + } + if (negative) { + *--walker = '-'; + } + + if (format.base == 16) { + *--walker = 'x'; + *--walker = '0'; + } + + return bh__print_string(str, n, walker); +} + +// 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; isize res; while (*fmt) { - i32 base = 10, size; + bh__print_format format = { 0 }; isize len = 0; while (*fmt && *fmt != '%') { @@ -1318,11 +1385,13 @@ isize bh_snprintf_va(char *str, isize n, char const *fmt, va_list va) { len++; } + if (!*fmt) goto end_of_format; + fmt++; switch (*fmt++) { - case 'o': base = 8; break; - case 'x': base = 16; break; + case 'o': format.base = 8; break; + case 'x': format.base = 16; break; default: fmt--; } @@ -1334,7 +1403,23 @@ isize bh_snprintf_va(char *str, isize n, char const *fmt, va_list va) { case 'd': { i64 value = (i64) va_arg(va, int); - len = bh__printi64(str, n, 0, value); + len = bh__printi64(str, n, format, value); + } break; + + case 'l': { + i64 value = (i64) va_arg(va, long); + len = bh__printi64(str, n, format, value); + } break; + + case 'p': { + u64 value = (u64) va_arg(va, ptr); + format.base = 16; + len = bh__printu64(str, n, format, value); + } break; + + case 's': { + char* s = va_arg(va, char *); + len = bh__print_string(str, n, s); } break; default: fmt--; @@ -1342,7 +1427,9 @@ isize bh_snprintf_va(char *str, isize n, char const *fmt, va_list va) { fmt++; +end_of_format: str += len; + n -= len; } return str - text_start + 1; diff --git a/onyx b/onyx index 43688daaadd05e62c3bd93ac00a2631ccd72878e..3c7d2ad1c1eeeda64c6002ffb5d4eaf25448da33 100755 GIT binary patch literal 75792 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

ir`}HMb4f@pR(SsGN_oxGy;Qpgg7pUV);<>fS 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 Q7yk$e2G_k_1n<%OF9xdK7XSbN diff --git a/onyx.c b/onyx.c index 07d27214..1c494b9b 100644 --- a/onyx.c +++ b/onyx.c @@ -3,8 +3,6 @@ #define BH_DEFINE #include "bh.h" -#include // TODO: Replace with custom lib - #include "onyxlex.h" #include "onyxmsgs.h" #include "onyxparser.h" @@ -13,7 +11,7 @@ int main(int argc, char *argv[]) { bh_file source_file; bh_file_error err = bh_file_open(&source_file, argv[1]); if (err != BH_FILE_ERROR_NONE) { - fprintf(stderr, "Failed to open file %s\n", argv[1]); + bh_printf_err("Failed to open file %s\n", argv[1]); return EXIT_FAILURE; } diff --git a/onyxmsgs.c b/onyxmsgs.c index 81f7b1df..53b35975 100644 --- a/onyxmsgs.c +++ b/onyxmsgs.c @@ -14,7 +14,7 @@ void onyx_message_add(OnyxMessages* msgs, OnyxMessageType type, OnyxFilePos pos, va_list arg_list; va_start(arg_list, pos); - vsnprintf(msg->text, ONYX_MSG_BUFFER_SIZE, msg_formats[type], arg_list); + bh_snprintf_va(msg->text, ONYX_MSG_BUFFER_SIZE, msg_formats[type], arg_list); va_end(arg_list); OnyxMessage** walker = &msgs->first; @@ -30,12 +30,12 @@ void onyx_message_print(OnyxMessages* msgs) { while (msg) { if (msg->pos.filename) { - printf("(%s:%ld:%ld) %s\n", msg->pos.filename, msg->pos.line, msg->pos.column, msg->text); + bh_printf("(%s:%l:%l) %s\n", msg->pos.filename, msg->pos.line, msg->pos.column, msg->text); } else { - printf("(%ld:%ld) %s\n", msg->pos.line, msg->pos.column, msg->text); + bh_printf("(%l:%l) %s\n", msg->pos.line, msg->pos.column, msg->text); } msg = msg->next; - } + } } void onyx_message_create(bh_allocator allocator, OnyxMessages* msgs) { diff --git a/onyxparser.c b/onyxparser.c index d8c9fd86..e5cfe1e8 100644 --- a/onyxparser.c +++ b/onyxparser.c @@ -122,7 +122,6 @@ static OnyxAstNode* parse_statement(OnyxParser* parser) { return NULL; default: - printf("ERROR\n"); parser_next_token(parser); return NULL; } -- 2.25.1