The Compiler, in Its Own Language
self-global-tracking

Global variable tracking using arrays:

var global_names: [64]i64 = undefined;
var g_count: i64 = 0;

fn add_global(name: i64) i64 {
    global_names[g_count] = name;
    g_count += 1;
    return 0;
}

fn is_global(name: i64) i64 {
    for (0..g_count) |i| {
        if (streq_mem(global_names[i], name) == 1) { return 1; }
    }
    return 0;
}

global_names[g_count] = name -- array write. global_names[i] -- array read. for (0..g_count) |i| -- range loop. No manual store64/load64 address arithmetic.