Local variables for the VM. Same pattern as the interpreter -- parallel arrays for names and values.
var vm_local_names: [64][]const u8 = undefined;
var vm_local_values: [64]i64 = [_]i64{0} ** 64;
var vm_local_count: usize = 0;
fn vm_get_local(name: []const u8) i64 {
for (0..vm_local_count) |i| {
if (streq(vm_local_names[i], name)) {
return vm_local_values[i];
}
}
return 0;
}
fn vm_set_local(name: []const u8, val: i64) void {
for (0..vm_local_count) |i| {
if (streq(vm_local_names[i], name)) {
vm_local_values[i] = val;
return;
}
}
vm_local_names[vm_local_count] = name;
vm_local_values[vm_local_count] = val;
vm_local_count += 1;
}
We reuse our streq from Problem 16. No standard library, remember?