From 5d2b0377d89353631aff6eb1d9b25af8a6a3d3ce Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 27 Sep 2021 19:12:24 -0600 Subject: [PATCH] reset attributed variables queue when backtracking (#678, etc.) --- src/machine/attributed_variables.rs | 6 --- src/machine/machine_state.rs | 60 ++--------------------------- src/machine/machine_state_impl.rs | 5 --- src/machine/stack.rs | 2 - 4 files changed, 4 insertions(+), 69 deletions(-) diff --git a/src/machine/attributed_variables.rs b/src/machine/attributed_variables.rs index 394cba71..f39a2ac8 100644 --- a/src/machine/attributed_variables.rs +++ b/src/machine/attributed_variables.rs @@ -34,12 +34,6 @@ impl AttrVarInitializer { self.attr_var_queue.clear(); self.bindings.clear(); } - - #[inline] - pub(super) fn backtrack(&mut self, queue_b: usize, bindings_b: usize) { - self.attr_var_queue.truncate(queue_b); - self.bindings.truncate(bindings_b); - } } impl MachineState { diff --git a/src/machine/machine_state.rs b/src/machine/machine_state.rs index 1d8220e7..d4981852 100644 --- a/src/machine/machine_state.rs +++ b/src/machine/machine_state.rs @@ -752,20 +752,7 @@ pub(crate) trait CallPolicy: Any + fmt::Debug { .heap .truncate(machine_st.stack.index_or_frame(b).prelude.h); - let attr_var_init_queue_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_queue_b; - let attr_var_init_bindings_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_bindings_b; - - machine_st - .attr_var_init - .backtrack(attr_var_init_queue_b, attr_var_init_bindings_b); + machine_st.attr_var_init.reset(); machine_st.hb = machine_st.heap.h(); machine_st.p += 1; @@ -808,20 +795,7 @@ pub(crate) trait CallPolicy: Any + fmt::Debug { .heap .truncate(machine_st.stack.index_or_frame(b).prelude.h); - let attr_var_init_queue_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_queue_b; - let attr_var_init_bindings_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_bindings_b; - - machine_st - .attr_var_init - .backtrack(attr_var_init_queue_b, attr_var_init_bindings_b); + machine_st.attr_var_init.reset(); machine_st.hb = machine_st.heap.h(); machine_st.p = CodePtr::Local(dir_entry!(machine_st.p.local().abs_loc() + offset)); @@ -862,20 +836,7 @@ pub(crate) trait CallPolicy: Any + fmt::Debug { .heap .truncate(machine_st.stack.index_or_frame(b).prelude.h); - let attr_var_init_queue_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_queue_b; - let attr_var_init_bindings_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_bindings_b; - - machine_st - .attr_var_init - .backtrack(attr_var_init_queue_b, attr_var_init_bindings_b); + machine_st.attr_var_init.reset(); machine_st.b = machine_st.stack.index_or_frame(b).prelude.b; machine_st.stack.truncate(b); @@ -918,20 +879,7 @@ pub(crate) trait CallPolicy: Any + fmt::Debug { .heap .truncate(machine_st.stack.index_or_frame(b).prelude.h); - let attr_var_init_queue_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_queue_b; - let attr_var_init_bindings_b = machine_st - .stack - .index_or_frame(b) - .prelude - .attr_var_init_bindings_b; - - machine_st - .attr_var_init - .backtrack(attr_var_init_queue_b, attr_var_init_bindings_b); + machine_st.attr_var_init.reset(); machine_st.b = machine_st.stack.index_or_frame(b).prelude.b; machine_st.stack.truncate(b); diff --git a/src/machine/machine_state_impl.rs b/src/machine/machine_state_impl.rs index ffb80d46..c4929d2d 100644 --- a/src/machine/machine_state_impl.rs +++ b/src/machine/machine_state_impl.rs @@ -3298,9 +3298,6 @@ impl MachineState { or_frame.prelude.h = self.heap.h(); or_frame.prelude.b0 = self.b0; - or_frame.prelude.attr_var_init_queue_b = self.attr_var_init.attr_var_queue.len(); - or_frame.prelude.attr_var_init_bindings_b = self.attr_var_init.bindings.len(); - self.b = b; for i in 1..n + 1 { @@ -3504,8 +3501,6 @@ impl MachineState { or_frame.prelude.tr = self.tr; or_frame.prelude.h = self.heap.h(); or_frame.prelude.b0 = self.b0; - or_frame.prelude.attr_var_init_queue_b = self.attr_var_init.attr_var_queue.len(); - or_frame.prelude.attr_var_init_bindings_b = self.attr_var_init.attr_var_queue.len(); self.b = b; diff --git a/src/machine/stack.rs b/src/machine/stack.rs index 8240d2a8..c259ee5e 100644 --- a/src/machine/stack.rs +++ b/src/machine/stack.rs @@ -112,8 +112,6 @@ pub(crate) struct OrFramePrelude { pub(crate) pstr_tr: usize, pub(crate) h: usize, pub(crate) b0: usize, - pub(crate) attr_var_init_queue_b: usize, - pub(crate) attr_var_init_bindings_b: usize, } #[derive(Debug)] -- 2.54.0