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.