reset attributed variables queue when backtracking (#678, etc.)

This commit is contained in:
Mark Thom
2021-09-27 19:12:24 -06:00
parent f6d69b6051
commit 5d2b0377d8
4 changed files with 4 additions and 69 deletions

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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;

View File

@@ -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)]