}
pub(super)
-fn compile_into_module<R: Read>(wam: &mut Machine, module_name: ClauseName, src: R,
- name: ClauseName, arity: usize)
+fn compile_into_module<R: Read>(wam: &mut Machine, module_name: ClauseName, src: R, name: ClauseName)
-> EvalSession
{
let mut indices = default_index_store!(wam.atom_tbl_of(&name));
match wam.indices.modules.get_mut(&module_name) {
Some(module) => {
- let code_dir = mem::replace(&mut indices.code_dir, CodeDir::new());
- module.code_dir.extend(code_dir);
-
- if module.module_decl.exports.contains(&(name.clone(), arity)) {
- if let Some(idx) = wam.indices.code_dir.get(&(name.clone(), arity)) {
- if module.module_decl.name == module_name {
- if module_code.len() > 0 {
- set_code_index!(idx, IndexPtr::Index(wam.code_repo.code.len()),
- module_name.clone());
- } else {
- set_code_index!(idx, IndexPtr::Undefined, module_name.clone());
- }
- }
- }
+ let mut code_dir = mem::replace(&mut indices.code_dir, CodeDir::new());
+
+ // replace the "user" module src's in the indices with module_name.
+ for (_, idx) in code_dir.iter_mut() {
+ let p = idx.0.borrow().0;
+ set_code_index!(idx, p, module_name.clone());
}
+
+ module.code_dir.extend(code_dir);
},
_ => unreachable!()
};
match module.as_str() {
"user" => compile_user_module(self, src),
- _ => compile_into_module(self, module, src, name, arity)
+ _ => compile_into_module(self, module, src, name)
}
},
None => compile_user_module(self, src)
},
- _ => compile_into_module(self, name.owning_module(), src, name, arity)
+ _ => compile_into_module(self, name.owning_module(), src, name)
}
}
println!("warning: overwriting {}/{}", &name, arity);
}
- let (p, module_name) = idx.0.borrow().clone();
+ let (p, module_name) = idx.0.borrow().clone();
set_code_index!(code_idx, p, module_name);
return;
}
if let Some(code_data) = submodule.code_dir.get(&(name.clone(), arity)) {
let name = name.with_table(submodule.atom_tbl.clone());
let mut atom_tbl = self.atom_tbl();
-
+
atom_tbl.borrow_mut().insert(name.to_rc());
self.insert_dir_entry(name, arity, code_data.clone());
}
fn get_code_index(&self, key: PredicateKey, _: ClauseName) -> Option<CodeIndex> {
- self.code_dir.get(&key).cloned().map(CodeIndex::from)
+ self.code_dir.get(&key).cloned()
}
fn remove_code_index(&mut self, key: PredicateKey) {