remove operators declared at user-level from files when reloading

This commit is contained in:
Mark Thom
2021-03-16 13:47:30 -06:00
parent 51424aed32
commit 5f7abda22d
4 changed files with 85 additions and 56 deletions

View File

@@ -1474,16 +1474,29 @@ impl Machine {
exports: vec![],
};
if !loader.load_state.wam.indices.modules.contains_key(&module_decl.name) {
let module_name = module_decl.name.clone();
let module = Module::new(module_decl, ListingSource::DynamicallyGenerated);
let module_name = module_decl.name.clone();
if !loader.load_state.wam.indices.modules.contains_key(&module_decl.name) {
let module = Module::new_in_situ(module_decl);
loader.load_state.wam.indices.modules.insert(module_name, module);
} else {
loader.load_state.reset_in_situ_module(
module_decl.clone(),
&ListingSource::DynamicallyGenerated,
);
match loader.load_state.wam.indices.modules.get_mut(&module_name) {
Some(module) => {
for (key, value) in module.op_dir.drain(0 ..) {
let (prec, spec) = value.shared_op_desc().get();
let mut op_decl = OpDecl::new(prec, spec, key.0);
op_decl.remove(&mut loader.load_state.wam.indices.op_dir);
}
}
None => {
}
}
}
}