From a5adcfff4cf72e0a8c89b334924ebe4e6701d170 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Fri, 18 Feb 2022 19:49:16 -0700 Subject: [PATCH] adjust dynamic external indices upon retraction, reset dynamic_mode to Next regardless of success or failure --- src/machine/compile.rs | 12 +++++++----- src/machine/dispatch.rs | 14 ++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/machine/compile.rs b/src/machine/compile.rs index e11466fc..157f16ae 100644 --- a/src/machine/compile.rs +++ b/src/machine/compile.rs @@ -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, }; diff --git a/src/machine/dispatch.rs b/src/machine/dispatch.rs index 8663a407..fe22678d 100644 --- a/src/machine/dispatch.rs +++ b/src/machine/dispatch.rs @@ -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; } } } -- 2.54.0