I understand what the assembler is supposed to do. I am not seeing the correct behavior in VMEmulator when running my own OS modules if a static variable in Sys is created/assigned.
I can put up some test code later tonight, but here's a high level description of the behavior I was seeing:
class Sys {
static String bar;
function void Sys.init() {
do Math.init() // Math.init() creates and assigns a static variable Math.foo.
// VMEmulator does "push static 0" and stores it in RAM[16]
do Output.init() // More static variables assigned, stored in RAM[17] and beyond
...
let bar = "ERR" // VMEmulator takes the "push static 0" at the last step of this assignment,
// and stores the pointer to Sys.bar in RAM[16], overwriting Math.foo
return;
}
}
The assembler, which VMEmulator is handling internally, should not be assigning static 0 in Math to the same RAM address as static 0 in Sys.