#include #include #include #include #include /* Oat Internal Functions --------------------------------------------------- */ int64_t* oat_malloc(int64_t size) { return (int64_t*)calloc(size, sizeof(char)); } int64_t* oat_alloc_array (int64_t size) { assert (size >= 0); int64_t *arr = (int64_t*)calloc(size+1, sizeof(int64_t)); arr[0] = size; return arr; } void oat_assert_not_null (int8_t* ptr) { if (ptr == NULL) { fprintf(stderr, "Attempted to dereference null pointer"); exit(1); } } void oat_assert_array_length (int64_t *array, int64_t ind) { if (array == NULL) { fprintf(stderr, "Attempted to index null array"); exit(1); } else if ((ind < 0) || (*array <= ind)) { fprintf(stderr, "Out of bounds index %ld for array length %ld", (long)ind, (long)*array); exit(1); } } /* Oat Builtin Functions ---------------------------------------------------- */ int64_t* array_of_string (char *str) { int64_t len, i, *arr; assert (NULL != str); len = strlen(str); assert (len >= 0); arr = (int64_t*)malloc(sizeof(int64_t) * (len+1)); arr[0] = len; for (i=0; i= 0); str = malloc(sizeof(char) * (len+1)); for (i=0; i