From: Mark Thom Date: Wed, 29 Apr 2020 01:22:20 +0000 (-0600) Subject: check that lower bound on term expansion drain is below the len of the term expansion... X-Git-Tag: v0.8.123~95^2~3 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=a3bb288f015b52ad23e0ad1cbbdc76bef8701e3e;p=scryer-prolog.git check that lower bound on term expansion drain is below the len of the term expansion vector, queue (#416) --- 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,