simListRe-parse()s the named modules' source files and evaluates them into the
simList's module environments. Shared by three callers, for two different
reasons:
.reparseModules(sim, modules, verbose = getOption("reproducible.verbose"))sim, invisibly.
A simList.
Character vector of (non-core) module names to re-parse.
Numeric verbosity. At verbose > 0 each re-parsed module is
announced; a module whose source cannot be found, or whose code cannot be
evaluated (e.g., a package it loads is not installed), always warns.
restartSpades() and restartSimInit() use it to pick up any fixes the
developer made to a module after an interrupted run;
loadSimList() uses it because saveSimList() does not carry the module
functions at all. Copy(objects = 2) -- the path .wrap.simList() takes
-- rebuilds each .mods[[module]] environment from scratch and copies
only .modObjs back into it, so without this a reloaded simList fails
with object 'doEvent.<module>' not found.
Only the module's code is evaluated: the defineModule() item is skipped.
Its metadata is already in the simList -- and for a loaded simList that
metadata is end-state, so re-evaluating defineModule() would risk
replacing it with the module's declared defaults. That is exactly why
"just call simInit() again" is not an answer for loadSimList().
Operates by side effect on sim@.xData (an environment), so the input
sim is mutated in place.