]> Repositorios git - scryer-prolog.git/commitdiff
reset attributed variables queue when backtracking (#678, etc.)
authorMark Thom <[email protected]>
Tue, 28 Sep 2021 01:12:24 +0000 (19:12 -0600)
committerMark Thom <[email protected]>
Tue, 28 Sep 2021 01:12:24 +0000 (19:12 -0600)
src/machine/attributed_variables.rs
src/machine/machine_state.rs
src/machine/machine_state_impl.rs
src/machine/stack.rs

index 394cba714472519f6ffea4e4a83c545ca71113d7..f39a2ac8fa470e565d04c97b3618f445d8cf47f0 100644 (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 {
index 1d8220e7e51bef6a501d902b08845f1c726d13d5..d49818522d8a37236d5403ba3f2c98cf043c7ccc 100644 (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);
index ffb80d46bccf0920067f7be579c40fafd8fe2c76..c4929d2d5e1de17c2cb5585bc3be2b2ebe223658 100644 (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;
 
index 8240d2a875e7cfd5bc64c4e9d9f8c95b829fa711..c259ee5edc6370f11338a7f198dbbd2004724358 100644 (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)]