diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2019-09-27 23:34:29 -0400 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2019-09-27 23:34:29 -0400 |
commit | 991d739bb02b3506da5a0af0edd9a4fd505373a3 (patch) | |
tree | 75b32cd37e9a99f5609171f2a9156d2f2dc3f13f /util | |
parent | 685460f382e2e7039bd6ddf5c336abdb803a0372 (diff) |
added converter from named arguments to non-named
Diffstat (limited to 'util')
-rw-r--r-- | util/arr.c | 56 | ||||
-rw-r--r-- | util/blockarr.c | 61 | ||||
-rw-r--r-- | util/err.c | 129 | ||||
-rw-r--r-- | util/location.c | 10 | ||||
-rw-r--r-- | util/str.c | 23 |
5 files changed, 0 insertions, 279 deletions
diff --git a/util/arr.c b/util/arr.c deleted file mode 100644 index e3f5b8c..0000000 --- a/util/arr.c +++ /dev/null @@ -1,56 +0,0 @@ -typedef struct { - void *data; - size_t len; - size_t cap; - size_t item_sz; -} Array; - -static void arr_create(Array *arr, size_t item_sz) { - arr->len = arr->cap = 0; - arr->item_sz = item_sz; - arr->data = NULL; -} - -static inline void arr_reserve(Array *arr, size_t n) { - arr->cap = n; - arr->data = err_realloc(arr->data, arr->item_sz * arr->cap); - -} - -static inline void *arr_last(Array *arr) { - if (arr->data) - return (void*)((char*)arr->data + arr->item_sz * (arr->len - 1)); - else - return NULL; -} - -static void *arr_add(Array *arr) { - if (arr->len >= arr->cap) { - arr_reserve(arr, (arr->cap + 1) * 2); - } - arr->len++; - return (void*)((char*)arr->data + arr->item_sz * (arr->len - 1)); -} - -static void arr_clear(Array *arr) { - free(arr->data); - arr->len = arr->cap = 0; - arr->data = NULL; -} - -static void arr_remove_last(Array *arr) { - /* OPTIM (memory): Shorten array. */ - arr->len--; - if (!arr->len) { - arr_clear(arr); - } - -} - -static void arr_free(Array *arr) { - free(arr->data); -} - -/* NOTE: this will not work if type is a pointer! */ -#define arr_foreach(arr, type, var) for (type *var = (arr)->data, *var##_foreach_last = arr_last(arr); var; var == var##_foreach_last ? var = NULL : var++) -#define arr_foreach_reverse(arr, type, var) for (type *var = arr_last(arr); var; var == (arr)->data ? var = NULL : var--) diff --git a/util/blockarr.c b/util/blockarr.c deleted file mode 100644 index 38bbf1b..0000000 --- a/util/blockarr.c +++ /dev/null @@ -1,61 +0,0 @@ -/* -A block array is an array of blocks of T. -They ensure that pointers to values in the array are not invalidated -when something is added to the array. -*/ - -typedef struct { - void *data; - size_t n; /* number of things in this block so far */ - void *last; /* last one of them */ -} ArrBlock; - -typedef struct { - size_t item_sz; - int lg_block_sz; - /* NOTE: dynamic array tends to over-allocate, so we're using our own */ - Array blocks; -} BlockArr; - -/* -Note: the block size must be a power of 2, to use right shifting instead of division -(for optimization)! -*/ -static void block_arr_create(BlockArr *arr, int lg_block_sz, size_t item_sz) { - arr_create(&arr->blocks, sizeof(ArrBlock)); - arr->item_sz = item_sz; - arr->lg_block_sz = lg_block_sz; -} - -static void *block_arr_add(BlockArr *arr) { - ArrBlock *last_block; - last_block = arr_last(&arr->blocks); - if (arr->blocks.data == NULL || - (unsigned long)last_block->n >= (1UL << arr->lg_block_sz)) { - ArrBlock *block; - /* no blocks yet / ran out of blocks*/ - block = arr_add(&arr->blocks); - block->n = 1; - size_t bytes = arr->item_sz << arr->lg_block_sz; - block->data = err_malloc(bytes); - block->last = block->data; - return block->data; - } else { - last_block->last = (char*)last_block->last + arr->item_sz; - last_block->n++; - return last_block->last; - } -} - -static inline void *block_arr_get(BlockArr *arr, size_t index) { - size_t block_index = index >> arr->lg_block_sz; - ArrBlock *block = (ArrBlock*)arr->blocks.data + block_index; - return (char*)block->data + arr->item_sz * index; -} - -static void block_arr_free(BlockArr *arr) { - arr_foreach(&arr->blocks, ArrBlock, block) { - free(block->data); - } - arr_free(&arr->blocks); -} diff --git a/util/err.c b/util/err.c deleted file mode 100644 index ac620ec..0000000 --- a/util/err.c +++ /dev/null @@ -1,129 +0,0 @@ -#define USE_COLORED_TEXT 1 - -#if USE_COLORED_TEXT -#define TEXT_ERROR(x) "\x1b[91m" x "\x1b[0m" -#define TEXT_INFO(x) "\x1b[94m" x "\x1b[0m" -#define TEXT_WARN(x) "\x1b[93m" x "\x1b[0m" -#define TEXT_IMPORTANT(x) "\x1b[1m" x "\x1b[0m" -#else -#define TEXT_ERROR(x) x -#define TEXT_INFO(x) x -#define TEXT_WARN(x) x -#define TEXT_IMPORTANT(x) x -#endif - -static inline const char *ordinals(size_t x) { - switch (x % 10) { - case 1: return "st"; - case 2: return "nd"; - case 3: return "rd"; - default: return "th"; - } -} - -/* Write directly to the error file */ -static void err_fwrite(const void *data, size_t size, size_t n) { - fwrite(data, size, n, stderr); -} - -static void err_fprint(const char *fmt, ...) { - va_list args; - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); -} - -static void err_vfprint(const char *fmt, va_list args) { - vfprintf(stderr, fmt, args); -} - -static void err_print_header_(Location where) { - err_fprint(TEXT_ERROR("error:") " at line %lu of %s:\n", (unsigned long)where.line, where.filename); -} - -static void info_print_header_(Location where) { - err_fprint(TEXT_INFO("info:") " at line %lu of %s:\n", (unsigned long)where.line, where.filename); -} - -static void warn_print_header_(Location where) { - err_fprint(TEXT_WARN("warning:") " at line %lu of %s:\n", (unsigned long)where.line, where.filename); -} - -static void err_print_footer_(const char *context) { - const char *end = strchr(context, '\n'); - int has_newline = end != NULL; - if (!has_newline) - end = strchr(context, '\0'); - assert(end); - err_fprint("\n\there: --> "); - err_fwrite(context, 1, (size_t)(end - context)); - if (!has_newline) - err_fprint("<end of file>"); - err_fprint("\n"); -} - -/* Write nicely-formatted errors to the error file */ - - -static void err_vprint(Location where, const char *fmt, va_list args) { - err_print_header_(where); - err_vfprint(fmt, args); - err_print_footer_(where.code); -} - -static void err_print_(int line, const char *file, Location where, const char *fmt, ...) { - va_list args; - if (file) - err_fprint("Generated by line %d of %s:\n", line, file); - va_start(args, fmt); - err_vprint(where, fmt, args); - va_end(args); -} - -#define err_print(...) err_print_(__LINE__, __FILE__, __VA_ARGS__) - -static void info_print(Location where, const char *fmt, ...) { - va_list args; - va_start(args, fmt); - info_print_header_(where); - err_vfprint(fmt, args); - err_print_footer_(where.code); - va_end(args); -} - -static void warn_print(Location where, const char *fmt, ...) { - va_list args; - va_start(args, fmt); - warn_print_header_(where); - err_vfprint(fmt, args); - err_print_footer_(where.code); - va_end(args); -} - -static void *err_malloc(size_t size) { - void *ret = malloc(size); - if (!ret) { - fprintf(stderr, "Error: Out of memory.\n"); - abort(); - } - return ret; -} - -/* static void *err_calloc(size_t n, size_t size) { */ -/* void *ret = calloc(n, size); */ -/* if (!ret) { */ -/* fprintf(stderr, "Error: Out of memory.\n"); */ -/* abort(); */ -/* } */ -/* return ret; */ -/* } */ - -static void *err_realloc(void *data, size_t new_size) { - void *ret = realloc(data, new_size); - if (!ret) { - fprintf(stderr, "Error: Out of memory.\n"); - abort(); - } - return ret; -} - diff --git a/util/location.c b/util/location.c deleted file mode 100644 index 4b450ce..0000000 --- a/util/location.c +++ /dev/null @@ -1,10 +0,0 @@ -typedef uint32_t LineNo; -typedef struct { - LineNo line; - char *code; - const char *filename; -} Location; - -bool location_after(Location a, Location b) { /* a is after b? */ - return a.code > b.code; -} diff --git a/util/str.c b/util/str.c deleted file mode 100644 index ac4fb26..0000000 --- a/util/str.c +++ /dev/null @@ -1,23 +0,0 @@ -/* -A better alternative to strncpy. dest is guaranteed to be a null-terminated string -after this function is run. -Returns the number of characters copied to dest, not including the null character. -destsz must be greater than 0. -*/ -size_t str_copy(char *dest, size_t destsz, const char *src) { - assert(destsz); - if (!*src) { - *dest = 0; - return 0; - } - for (size_t i = 0; i < destsz-1; i++) { - *dest = *src; - if (!*src) { - *dest = 0; - return i; - } - src++; dest++; - } - dest[destsz-1] = 0; - return destsz-1; -} |