From b6504bf377ef262e49b707fa034a30d90aac3182 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Fri, 8 Apr 2022 21:18:59 -0600 Subject: [PATCH] deduplicate variable list in term_variables/2 (#1409) --- src/machine/system_calls.rs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index dc29f908..110f55ac 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -4902,7 +4902,7 @@ impl Machine { return; } - let mut seen_set = IndexSet::new(); + let mut seen_vec = vec![]; { let mut iter = stackful_preorder_iter(&mut self.machine_st.heap, stored_v); @@ -4911,22 +4911,17 @@ impl Machine { let addr = unmark_cell_bits!(addr); if addr.is_var() { - seen_set.insert(addr); + seen_vec.push(addr); } } } + seen_vec.dedup_by(|v1, v2| { + compare_term_test!(self.machine_st, *v1, *v2) == Some(std::cmp::Ordering::Equal) + }); + let outcome = heap_loc_as_cell!( - filtered_iter_to_heap_list( - &mut self.machine_st.heap, - seen_set.into_iter(), - |heap, value| { - heap_bound_store( - heap, - heap_bound_deref(heap, value), - ).is_var() - }, - ) + iter_to_heap_list(&mut self.machine_st.heap, seen_vec.into_iter()) ); unify_fn!(self.machine_st, a2, outcome); -- 2.54.0