I'm a bit sceptical that this is sufficient. What if `Module::load` is called during `semantic3`, you'll call `buildModules.push(m);` with a module that had no semantic run yet. When I implemented a similar functionality (~2 years ago) I had to explicitly do that.