Ctrl K
ComunidadGuías…

std/core.zc

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot

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;
}