Update c_factor() to use global.get for globals:
Where we emit local.get $name, change to:
if (c_is_global(name)) {
emit_str(" global.get $");
} else {
emit_str(" local.get $");
}
emit_str(name);
emit_byte('\n');
Update c_stmt() for var declarations and assignment -- use global.set for globals:
// In the var handler:
c_expression();
if (c_is_global(vname)) {
emit_str(" global.set $");
} else {
emit_str(" local.set $");
}
emit_str(vname);
emit_byte('\n');
// In the assignment handler:
c_expression();
if (c_is_global(word)) {
emit_str(" global.set $");
} else {
emit_str(" local.set $");
}
emit_str(word);
emit_byte('\n');
Also update scan_for_locals to skip globals -- they shouldn't appear as (local ...) declarations:
if (!dup and !c_is_global(vname)) {
local_names[local_count] = vname;
local_count += 1;
}