From a937eb4d8cd9c7ddbe6d5fa6ba2fee71a65bb298 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 26 Mar 2018 18:16:39 -0600 Subject: [PATCH] clean up call clause stuff. --- src/prolog/machine/machine_state.rs | 23 +++++++++++++---------- src/prolog/machine/machine_state_impl.rs | 8 ++++---- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/prolog/machine/machine_state.rs b/src/prolog/machine/machine_state.rs index c27cbb93..87a35947 100644 --- a/src/prolog/machine/machine_state.rs +++ b/src/prolog/machine/machine_state.rs @@ -215,6 +215,17 @@ pub struct MachineState { pub(crate) type CallResult = Result<(), Vec>; pub(crate) trait CallPolicy: Any { + fn context_call<'a>(&mut self, machine_st: &mut MachineState, code_dirs: CodeDirs<'a>, + name: ClauseName, arity: usize, lco: bool) + -> CallResult + { + if lco { + self.try_execute(machine_st, code_dirs, name, arity) + } else { + self.try_call(machine_st, code_dirs, name, arity) + } + } + fn try_call<'a>(&mut self, machine_st: &mut MachineState, code_dirs: CodeDirs<'a>, name: ClauseName, arity: usize) -> CallResult @@ -408,11 +419,7 @@ pub(crate) trait CallPolicy: Any { }, &ClauseType::CallN => if let Some((name, arity)) = machine_st.setup_call_n(arity) { - if lco { - self.try_execute(machine_st, code_dirs, name, arity) - } else { - self.try_call(machine_st, code_dirs, name, arity) - } + self.context_call(machine_st, code_dirs, name, arity, lco) } else { Ok(()) }, @@ -510,11 +517,7 @@ pub(crate) trait CallPolicy: Any { Ok(()) }, &ClauseType::Named(ref name) | &ClauseType::Op(ref name, _) => - if lco { - self.try_execute(machine_st, code_dirs, name.clone(), arity) - } else { - self.try_call(machine_st, code_dirs, name.clone(), arity) - }, + self.context_call(machine_st, code_dirs, name.clone(), arity, lco), &ClauseType::CallWithInferenceLimit => { machine_st.goto_ptr(CodePtr::DirEntry(393, clause_name!("builtin")), 3, lco); Ok(()) diff --git a/src/prolog/machine/machine_state_impl.rs b/src/prolog/machine/machine_state_impl.rs index fc0dc06b..73ae9e15 100644 --- a/src/prolog/machine/machine_state_impl.rs +++ b/src/prolog/machine/machine_state_impl.rs @@ -1285,14 +1285,14 @@ impl MachineState { self.compare_numbers(cmp, n1, n2); }, - &BuiltInInstruction::DefaultSetCutPoint(r) => { - let mut cut_policy = DefaultCutPolicy {}; - cut_policy.cut(self, r); - }, &BuiltInInstruction::DefaultRetryMeElse(o) => { let mut call_policy = DefaultCallPolicy {}; try_or_fail!(self, call_policy.retry_me_else(self, o)); }, + &BuiltInInstruction::DefaultSetCutPoint(r) => { + let mut cut_policy = DefaultCutPolicy {}; + cut_policy.cut(self, r); + }, &BuiltInInstruction::DefaultTrustMe => { let mut call_policy = DefaultCallPolicy {}; try_or_fail!(self, call_policy.trust_me(self)); -- 2.54.0