From: Mark Thom Date: Sat, 19 Feb 2022 02:49:16 +0000 (-0700) Subject: adjust dynamic external indices upon retraction, reset dynamic_mode to Next regardles... X-Git-Tag: v0.9.0^2~19 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=a5adcfff4cf72e0a8c89b334924ebe4e6701d170;p=scryer-prolog.git adjust dynamic external indices upon retraction, reset dynamic_mode to Next regardless of success or failure --- 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; } } }