From 40bf5bc75fc4124b4d6d0e373aabc0220a53e9ce Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 20 Jan 2020 20:59:30 -0700 Subject: [PATCH] don't hold on to popped or frames --- src/prolog/machine/machine_state.rs | 4 ++-- src/prolog/machine/machine_state_impl.rs | 6 ------ src/prolog/machine/stack.rs | 11 ++++------- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/prolog/machine/machine_state.rs b/src/prolog/machine/machine_state.rs index 134b2924..05749105 100644 --- a/src/prolog/machine/machine_state.rs +++ b/src/prolog/machine/machine_state.rs @@ -552,7 +552,7 @@ pub(crate) trait CallPolicy: Any { attr_var_init_queue_b, attr_var_init_bindings_b); - machine_st.truncate_stack(); + machine_st.stack.truncate(machine_st.b); machine_st.b = machine_st.stack.index_or_frame(b).prelude.b; machine_st.hb = machine_st.heap.h; @@ -600,7 +600,7 @@ pub(crate) trait CallPolicy: Any { attr_var_init_bindings_b, ); - machine_st.truncate_stack(); + machine_st.stack.truncate(machine_st.b); machine_st.b = machine_st.stack.index_or_frame(b).prelude.b; machine_st.hb = machine_st.heap.h; diff --git a/src/prolog/machine/machine_state_impl.rs b/src/prolog/machine/machine_state_impl.rs index 11894901..57aeab5d 100644 --- a/src/prolog/machine/machine_state_impl.rs +++ b/src/prolog/machine/machine_state_impl.rs @@ -2077,12 +2077,6 @@ impl MachineState { self.fail = true; } - pub(super) fn truncate_stack(&mut self) { - if self.b > self.e { - self.stack.truncate_to_frame(self.b); - } - } - pub(crate) fn is_cyclic_term(&self, addr: Addr) -> bool { let mut seen = IndexSet::new(); let mut fail = false; diff --git a/src/prolog/machine/stack.rs b/src/prolog/machine/stack.rs index 2de3582d..a9551756 100644 --- a/src/prolog/machine/stack.rs +++ b/src/prolog/machine/stack.rs @@ -321,18 +321,15 @@ impl Stack { } } - pub fn truncate_to_frame(&mut self, b: usize) { + pub fn truncate(&mut self, b: usize) { if b == 0 { - self.truncate(mem::align_of::()); + self.inner_truncate(mem::align_of::()); } else { - let univ_prelude = self.index_or_frame(b).prelude.univ_prelude; - let size = OrFrame::size_of(univ_prelude.num_cells); - - self.truncate(b + size); + self.inner_truncate(b); } } - fn truncate(&mut self, b: usize) { + fn inner_truncate(&mut self, b: usize) { let mut b = b + self.base as usize; let base = b; -- 2.54.0