std/core.zc
Rama main · réplica de lectura del repositorio original.
include <stdlib.h>
include <string.h>
include <stdio.h>
include <stdbool.h>
include <stdarg.h>
@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;
}