diff --git a/src/prolog/machine/code_repo.rs b/src/prolog/machine/code_repo.rs index eba8c5c9..78f3a548 100644 --- a/src/prolog/machine/code_repo.rs +++ b/src/prolog/machine/code_repo.rs @@ -53,12 +53,23 @@ impl CodeRepo { self.term_dir .get_mut(&key) .map(|entry| { - ( - Predicate((entry.0).0.drain(len..).collect()), - entry.1.drain(queue_len..).collect(), - ) + let terms = + if len < (entry.0).0.len() { + (entry.0).0.drain(len ..).collect() + } else { + vec![] + }; + + let queue = + if queue_len < entry.1.len() { + entry.1.drain(queue_len ..).collect() + } else { + VecDeque::new() + }; + + (Predicate(terms), queue) }) - .unwrap_or((Predicate::new(), VecDeque::from(vec![]))) + .unwrap_or((Predicate::new(), VecDeque::new())) } pub(crate) diff --git a/src/prolog/machine/term_expansion.rs b/src/prolog/machine/term_expansion.rs index 06d7b3be..d2b6419c 100644 --- a/src/prolog/machine/term_expansion.rs +++ b/src/prolog/machine/term_expansion.rs @@ -181,6 +181,7 @@ impl<'a> TermStream<'a> { te_len, te_queue_len, ); + let goal_expansion_additions = self.wam.code_repo.truncate_terms( (clause_name!("goal_expansion"), 2), ge_len,