include include include include include @unused fn __zenc_panic_impl(file: const char*, line: int, func: const char*, msg: const char*) { fprintf(stderr, "panic: %s\n at %s:%d in %s()\n", msg, file, line, func); exit(1); } @unused fn __zenc_todo_impl(file: const char*, line: int, func: const char*, msg: const char*) { fprintf(stderr, "todo: %s\n at %s:%d in %s()\n", msg, file, line, func); exit(1); } // Rune to string (UTF-8); used by string interpolation of rune values. @unused fn _z_str_rune(r: rune) -> char* { @thread_local static let buffer: char[5]; let val = (uint32_t)r; if (val < 0x80) { buffer[0] = (char)val; buffer[1] = 0; } else if (val < 0x800) { buffer[0] = (char)(0xC0 | (val >> 6)); buffer[1] = (char)(0x80 | (val & 0x3F)); buffer[2] = 0; } else if (val < 0x10000) { buffer[0] = (char)(0xE0 | (val >> 12)); buffer[1] = (char)(0x80 | ((val >> 6) & 0x3F)); buffer[2] = (char)(0x80 | (val & 0x3F)); buffer[3] = 0; } else { buffer[0] = (char)(0xF0 | (val >> 18)); buffer[1] = (char)(0x80 | ((val >> 12) & 0x3F)); buffer[2] = (char)(0x80 | ((val >> 6) & 0x3F)); buffer[3] = (char)(0x80 | (val & 0x3F)); buffer[4] = 0; } return (char*)buffer; }