From 92c36aa0d90bf80db27d834bd93663496bfd0304 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Fri, 8 Mar 2019 23:11:06 -0700 Subject: [PATCH] properly update dynamically updated predicates in module indices --- src/prolog/machine/compile.rs | 9 +++------ src/prolog/machine/mod.rs | 11 +++++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/prolog/machine/compile.rs b/src/prolog/machine/compile.rs index 5e56cc65..7b0851f1 100644 --- a/src/prolog/machine/compile.rs +++ b/src/prolog/machine/compile.rs @@ -183,7 +183,7 @@ fn compile_into_module(wam: &mut Machine, module_name: ClauseName, src: 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 == idx.0.borrow().1 { + 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()); @@ -423,11 +423,8 @@ impl ListingCompiler { let idx = code_dir.entry((name.clone(), arity)).or_insert(CodeIndex::default()); set_code_index!(idx, IndexPtr::Index(p), self.get_module_name()); -/* - println!("{}/{}:", name.as_str(), arity); - print_code(&decl_code); - */ - self.localize_self_calls(name, arity, &mut decl_code, p); + + self.localize_self_calls(name, arity, &mut decl_code, p); code.extend(decl_code.into_iter()); } diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index 4ab48aad..a88c7f8d 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -104,7 +104,6 @@ impl SubModuleUser for IndexStore { fn remove_code_index(&mut self, key: PredicateKey) { self.code_dir.remove(&key); - self.dynamic_code_dir.remove(&(key.0.owning_module(), key.0, key.1)); } fn insert_dir_entry(&mut self, name: ClauseName, arity: usize, idx: CodeIndex) @@ -222,11 +221,11 @@ impl Machine { // ensure we don't try to overwrite the name/arity of a builtin. let err_str = format!("{}/{}", key.0, key.1); let err_str = clause_name!(err_str, self.indices.atom_tbl()); - + return Err(SessionError::CannotOverwriteBuiltIn(err_str)); } }; - + if let Some(ref existing_idx) = self.indices.code_dir.get(&key) { // ensure we don't try to overwrite an existing predicate from a different module. if !existing_idx.is_undefined() && !idx.is_undefined() { @@ -239,7 +238,7 @@ impl Machine { let err_str = format!("{}/{} from module {}", key.0, key.1, existing_idx.module_name().as_str()); let err_str = clause_name!(err_str, self.indices.atom_tbl()); - + return Err(SessionError::CannotOverwriteImport(err_str)); } } @@ -248,7 +247,7 @@ impl Machine { Ok(()) } - + pub fn add_batched_code(&mut self, code: Code, code_dir: CodeDir) { // error detection has finished, so update the master index of keys. @@ -291,7 +290,7 @@ impl Machine { PrinterOutputter::new()) .result(); - let err_str = clause_name!(err_str, self.indices.atom_tbl()); + let err_str = clause_name!(err_str, self.indices.atom_tbl()); EvalSession::from(SessionError::QueryFailureWithException(err_str)) } else { EvalSession::from(SessionError::QueryFailure) -- 2.54.0