From f7b401b9b65ca1dc7a0b64cca907d40076f4aa5f Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Thu, 30 Apr 2020 09:28:11 -0600 Subject: [PATCH] fix user:goal_expansion --- src/prolog/machine/compile.rs | 45 +++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/prolog/machine/compile.rs b/src/prolog/machine/compile.rs index 92d71d97..a8fad967 100644 --- a/src/prolog/machine/compile.rs +++ b/src/prolog/machine/compile.rs @@ -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) -- 2.54.0