]> Repositorios git - scryer-prolog.git/commitdiff
stop module dynamic predicate modifications from taking on the user module index.
authorMark Thom <[email protected]>
Sat, 9 Mar 2019 07:37:58 +0000 (00:37 -0700)
committerMark Thom <[email protected]>
Sat, 9 Mar 2019 07:37:58 +0000 (00:37 -0700)
src/prolog/machine/compile.rs
src/prolog/machine/dynamic_database.rs
src/prolog/machine/mod.rs
src/prolog/machine/modules.rs

index 7b0851f1c55bdef737ae7109d8fbd3e2ced774d0..55dfd6917c4cfa8f956fa9c51cabf278876abec1 100644 (file)
@@ -159,8 +159,7 @@ pub fn compile_term(wam: &mut Machine, packet: TopLevelPacket) -> EvalSession
 }
 
 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));
@@ -178,21 +177,15 @@ fn compile_into_module<R: Read>(wam: &mut Machine, module_name: ClauseName, src:
 
     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!()
     };
index 94aec56781d471e80cb0ff0a7ab043807f1931fd..169613b4188e1cb4dc7de5ffc93640fabc27639c 100644 (file)
@@ -26,12 +26,12 @@ impl Machine {
 
                     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)
         }
     }
 
index a88c7f8def79e17242306112aaff140c8f57ef8a..3b57e7af520452107f80f914d5bdc43f3f27a113 100644 (file)
@@ -113,7 +113,7 @@ impl SubModuleUser for IndexStore {
                 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;
         }
index ebdc4c24ef3a46cd28e909744c52c6df560665b9..aa040ba29a4b3ed74d6b03e2efef4bdc76ae11e4 100644 (file)
@@ -121,7 +121,7 @@ pub trait SubModuleUser
         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());
@@ -176,7 +176,7 @@ impl SubModuleUser for Module {
     }
 
     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) {