]> Repositorios git - scryer-prolog.git/commitdiff
properly update dynamically updated predicates in module indices
authorMark Thom <[email protected]>
Sat, 9 Mar 2019 06:11:06 +0000 (23:11 -0700)
committerMark Thom <[email protected]>
Sat, 9 Mar 2019 06:11:06 +0000 (23:11 -0700)
src/prolog/machine/compile.rs
src/prolog/machine/mod.rs

index 5e56cc6542cd6b353539f9feaee85265e70e3930..7b0851f1c55bdef737ae7109d8fbd3e2ced774d0 100644 (file)
@@ -183,7 +183,7 @@ fn compile_into_module<R: Read>(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());
         }
 
index 4ab48aada8fd90c77fa56739338e53b57b7c29fa..a88c7f8def79e17242306112aaff140c8f57ef8a 100644 (file)
@@ -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)