]> Repositorios git - scryer-prolog.git/commitdiff
fix user:goal_expansion
authorMark Thom <[email protected]>
Thu, 30 Apr 2020 15:28:11 +0000 (09:28 -0600)
committerMark Thom <[email protected]>
Thu, 30 Apr 2020 15:28:11 +0000 (09:28 -0600)
src/prolog/machine/compile.rs

index 92d71d976cdb243b04920b52385cf43894de1194..a8fad96761e068ad78427071b230a7274ccef6da 100644 (file)
@@ -882,25 +882,44 @@ impl ListingCompiler {
 
         let (mut len, mut queue_len) = ((preds.0).0.len(), preds.1.len());
 
-        let module_preds = self
-            .user_term_dir
-            .entry(key.clone())
-            .or_insert((Predicate::new(), VecDeque::from(vec![])));
+        if self.module.is_some() && hook.has_module_scope() {
+            let module_preds = self
+                .user_term_dir
+                .entry(key.clone())
+                .or_insert((Predicate::new(), VecDeque::from(vec![])));
 
-        if let Some(ref mut module) = &mut self.module {
-            module.add_expansion_record(hook, clause.clone(), queue.clone());
-            module.add_local_expansion(hook, clause.clone(), queue.clone());
-        }
+            if let Some(ref mut module) = &mut self.module {
+                module.add_expansion_record(hook, clause.clone(), queue.clone());
+                module.add_local_expansion(hook, clause.clone(), queue.clone());
+            }
+
+            (module_preds.0).0.push(clause);
+            module_preds.1.extend(queue.into_iter());
 
-        (module_preds.0).0.push(clause);
-        module_preds.1.extend(queue.into_iter());
+            (preds.0).0.extend((module_preds.0).0.iter().cloned());
+            preds.1.extend(module_preds.1.iter().cloned());
+        } else {
+            let module_preds = self
+                .user_term_dir
+                .entry(key.clone())
+                .or_insert((Predicate::new(), VecDeque::from(vec![])));
 
-        (preds.0).0.extend((module_preds.0).0.iter().cloned());
-        preds.1.extend(module_preds.1.iter().cloned());
+            if let Some(ref mut module) = &mut self.module {
+                module.add_expansion_record(hook, clause.clone(), queue.clone());
+                module.add_local_expansion(hook, clause.clone(), queue.clone());
+            }
 
-        if !(self.module.is_some() && hook.has_module_scope()) {
             len += 1;
             queue_len += queue_len;
+
+            (preds.0).0.push(clause.clone());
+            preds.1.extend(queue.iter().cloned());
+
+            (preds.0).0.extend((module_preds.0).0.iter().cloned());
+            preds.1.extend(module_preds.1.iter().cloned());
+
+            (module_preds.0).0.push(clause);
+            module_preds.1.extend(queue.into_iter());
         }
 
         (len, queue_len)