add backtracking of attributed variable data

This commit is contained in:
Mark Thom
2019-12-06 20:52:40 -04:00
parent f998d6a99f
commit 3d2c4f0801
3 changed files with 32 additions and 24 deletions

View File

@@ -441,11 +441,10 @@ pub(crate) trait CallPolicy: Any {
machine_st.heap.truncate(machine_st.stack.index_or_frame(b).prelude.h);
let attr_var_init_b = machine_st.stack.index_or_frame(b).prelude.attr_var_init_b;
machine_st
.attr_var_init
.attr_var_queue
.truncate(attr_var_init_b);
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.hb = machine_st.heap.h;
machine_st.p += 1;
@@ -485,11 +484,10 @@ pub(crate) trait CallPolicy: Any {
machine_st.heap.truncate(machine_st.stack.index_or_frame(b).prelude.h);
let attr_var_init_b = machine_st.stack.index_or_frame(b).prelude.attr_var_init_b;
machine_st
.attr_var_init
.attr_var_queue
.truncate(attr_var_init_b);
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.hb = machine_st.heap.h;
machine_st.p += offset;
@@ -527,11 +525,10 @@ pub(crate) trait CallPolicy: Any {
machine_st.heap.truncate(machine_st.stack.index_or_frame(b).prelude.h);
let attr_var_init_b = machine_st.stack.index_or_frame(b).prelude.attr_var_init_b;
machine_st
.attr_var_init
.attr_var_queue
.truncate(attr_var_init_b);
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.b = machine_st.stack.index_or_frame(b).prelude.b;
machine_st.truncate_stack();
@@ -572,11 +569,10 @@ pub(crate) trait CallPolicy: Any {
machine_st.heap.truncate(machine_st.stack.index_or_frame(b).prelude.h);
let attr_var_init_b = machine_st.stack.index_or_frame(b).prelude.attr_var_init_b;
machine_st
.attr_var_init
.attr_var_queue
.truncate(attr_var_init_b);
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.b = machine_st.stack.index_or_frame(b).prelude.b;
machine_st.truncate_stack();