#include "chibicc-uxn/varvara.h" char mem[100]; unsigned mem_length; char * aalloc(unsigned size) { unsigned pos = mem_length; mem_length += size; return (char *)&mem[pos]; } char * areturn(unsigned checkpoint, char *src, unsigned size) { char *dest = (char *)&mem[checkpoint]; if(src == dest) return src; for (unsigned i = 0; i < size; i++) { dest[i] = src[i]; } mem_length = checkpoint + size; /* zero out the end of the memory copy (for strings mostly) */ mem[mem_length] = 0; return dest; } void afree() { mem_length = 0; } char * amcpy(char *from, unsigned length) { char *ptr = aalloc(length); for (unsigned i = 0; i < length; i++) { ptr[i] = from[i]; } return ptr; } char* nat_to_str(unsigned n) { char buffer[5]; unsigned i = 5; do { buffer[--i] = '0' + n % 10; n /= 10; } while(n > 0); return amcpy(buffer + i, 5 - i); } char* int_to_str(int n) { char buffer[6]; unsigned i = 6; _Bool neg = n < 0; if (neg) n = -n; do { buffer[--i] = '0' + n % 10; n /= 10; } while(n > 0); if(neg) buffer[--i] = '-'; return amcpy(buffer + i, 6 - i); } unsigned int_to_nat(int n) { return (unsigned)n; } int nat_to_int(unsigned n) { return (int)n; }