From b8400e0c92f0fb01cfdab5bf4e6bb48248ddf9a1 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 3 May 2020 18:43:23 -0600 Subject: [PATCH] make term{_attributed_}variables/2 order {attributed} variables by left-to-right occurrence --- src/prolog/machine/attributed_variables.rs | 8 +++----- src/prolog/machine/system_calls.rs | 10 +++------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/prolog/machine/attributed_variables.rs b/src/prolog/machine/attributed_variables.rs index 6595ba53..b7e9ceee 100644 --- a/src/prolog/machine/attributed_variables.rs +++ b/src/prolog/machine/attributed_variables.rs @@ -1,8 +1,6 @@ use crate::prolog::heap_iter::*; use crate::prolog::machine::*; -use indexmap::IndexSet; - use std::cmp::Ordering; use std::vec::IntoIter; @@ -142,13 +140,13 @@ impl MachineState { } pub(super) - fn attr_vars_of_term(&self, addr: Addr) -> IndexSet { - let mut seen_vars = IndexSet::new(); + fn attr_vars_of_term(&self, addr: Addr) -> Vec { + let mut seen_vars = vec![]; let mut iter = self.acyclic_pre_order_iter(addr); while let Some(addr) = iter.next() { if let HeapCellValue::Addr(Addr::AttrVar(h)) = self.heap.index_addr(&addr).as_ref() { - seen_vars.insert(addr); + seen_vars.push(addr); let mut l = h + 1; let mut list_elements = vec![]; diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index 74f82215..881789ea 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -20,8 +20,6 @@ use crate::prolog::rug::Integer; use crate::ref_thread_local::RefThreadLocal; -use indexmap::IndexSet; - use std::cmp; use std::convert::TryFrom; use std::io::{stdout, Read, Write}; @@ -3378,18 +3376,16 @@ impl MachineState { } &SystemClauseType::TermVariables => { let a1 = self[temp_v!(1)]; - let mut seen_vars = IndexSet::new(); + let mut seen_vars = vec![]; for addr in self.acyclic_pre_order_iter(a1) { if addr.is_ref() { - seen_vars.insert(addr); + seen_vars.push(addr); } } let outcome = Addr::HeapCell(self.heap.to_list(seen_vars.into_iter())); - - let a2 = self[temp_v!(2)]; - self.unify(a2, outcome); + self.unify(self[temp_v!(2)], outcome); } &SystemClauseType::TruncateLiftedHeapTo => { match self.store(self.deref(self[temp_v!(1)])) { -- 2.54.0