]> Repositorios git - scryer-prolog.git/commitdiff
adjust dynamic external indices upon retraction, reset dynamic_mode to Next regardles...
authorMark Thom <[email protected]>
Sat, 19 Feb 2022 02:49:16 +0000 (19:49 -0700)
committerMark Thom <[email protected]>
Sat, 19 Feb 2022 08:00:02 +0000 (01:00 -0700)
src/machine/compile.rs
src/machine/dispatch.rs

index e11466fc509e8bf801da3488697e4551b4da0989..157f16aeda4f7701529ab41033793022455c4d8a 100644 (file)
@@ -1769,11 +1769,13 @@ impl<'a, LS: LoadState<'a>> Loader<'a, LS> {
             .opt_arg_index_key
             .switch_on_term_loc()
         {
-            Some(index_loc) => find_inner_choice_instr(
-                &self.wam_prelude.code,
-                skeleton.clauses[target_pos].clause_start,
-                index_loc,
-            ),
+            Some(index_loc) => {
+                find_inner_choice_instr(
+                    &self.wam_prelude.code,
+                    skeleton.clauses[target_pos].clause_start,
+                    index_loc,
+                )
+            }
             None => skeleton.clauses[target_pos].clause_start,
         };
 
index 8663a407870e70626f3fa9aa5f2e9f77e04574fd..fe22678de2660115e4db5be3116d1068d4f634f1 100644 (file)
@@ -1033,12 +1033,11 @@ impl Machine {
                         }
                     }
 
+                    self.machine_st.dynamic_mode = FirstOrNext::Next;
+
                     if self.machine_st.fail {
                         self.machine_st.backtrack();
-                        continue;
                     }
-
-                    self.machine_st.dynamic_mode = FirstOrNext::Next;
                 }
                 &Instruction::DynamicInternalElse(..) => {
                     let p = self.machine_st.p;
@@ -1115,12 +1114,11 @@ impl Machine {
                         }
                     }
 
+                    self.machine_st.dynamic_mode = FirstOrNext::Next;
+
                     if self.machine_st.fail {
                         self.machine_st.backtrack();
-                        continue;
                     }
-
-                    self.machine_st.dynamic_mode = FirstOrNext::Next;
                 }
                 &Instruction::TryMeElse(offset) => {
                     self.machine_st.try_me_else(offset);
@@ -3129,10 +3127,10 @@ impl Machine {
                                 }
                             }
 
+                            self.machine_st.dynamic_mode = FirstOrNext::Next;
+
                             if self.machine_st.fail {
                                 self.machine_st.backtrack();
-                            } else {
-                                self.machine_st.dynamic_mode = FirstOrNext::Next;
                             }
                         }
                     }