summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/arr.c56
-rw-r--r--util/blockarr.c61
-rw-r--r--util/err.c129
-rw-r--r--util/location.c10
-rw-r--r--util/str.c23
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;
-}