From: Mark Thom Date: Wed, 3 Oct 2018 02:37:15 +0000 (-0600) Subject: remove module name from DirEntry X-Git-Tag: v0.8.110~354 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=61536d2004f8e113ab4100f160063dd46e9602b8;p=scryer-prolog.git remove module name from DirEntry --- diff --git a/src/prolog/instructions.rs b/src/prolog/instructions.rs index b43671a3..e695992d 100644 --- a/src/prolog/instructions.rs +++ b/src/prolog/instructions.rs @@ -858,9 +858,9 @@ impl CodePtr { } } -#[derive(Clone, PartialEq)] +#[derive(Copy, Clone, PartialEq)] pub enum LocalCodePtr { - DirEntry(usize, ClauseName), // offset, resident module name. + DirEntry(usize), // offset. TopLevel(usize, usize), // chunk_num, offset. UserTermExpansion(usize) } @@ -886,7 +886,7 @@ impl PartialOrd for CodePtr { impl PartialOrd for LocalCodePtr { fn partial_cmp(&self, other: &LocalCodePtr) -> Option { match (self, other) { - (&LocalCodePtr::DirEntry(p1, _), &LocalCodePtr::DirEntry(p2, _)) => + (&LocalCodePtr::DirEntry(p1), &LocalCodePtr::DirEntry(p2)) => p1.partial_cmp(&p2), (&LocalCodePtr::DirEntry(..), &LocalCodePtr::TopLevel(_, _)) => Some(Ordering::Less), @@ -914,7 +914,7 @@ impl Add for LocalCodePtr { fn add(self, rhs: usize) -> Self::Output { match self { - LocalCodePtr::DirEntry(p, name) => LocalCodePtr::DirEntry(p + rhs, name), + LocalCodePtr::DirEntry(p) => LocalCodePtr::DirEntry(p + rhs), LocalCodePtr::TopLevel(cn, p) => LocalCodePtr::TopLevel(cn, p + rhs), LocalCodePtr::UserTermExpansion(p) => LocalCodePtr::UserTermExpansion(p + rhs) } @@ -925,7 +925,7 @@ impl AddAssign for LocalCodePtr { fn add_assign(&mut self, rhs: usize) { match self { &mut LocalCodePtr::UserTermExpansion(ref mut p) - | &mut LocalCodePtr::DirEntry(ref mut p, _) + | &mut LocalCodePtr::DirEntry(ref mut p) | &mut LocalCodePtr::TopLevel(_, ref mut p) => *p += rhs } } diff --git a/src/prolog/machine/machine_state.rs b/src/prolog/machine/machine_state.rs index 0caf4785..17d6bfea 100644 --- a/src/prolog/machine/machine_state.rs +++ b/src/prolog/machine/machine_state.rs @@ -260,19 +260,19 @@ pub struct MachineState { pub(crate) flags: MachineFlags } -fn call_at_index(machine_st: &mut MachineState, module_name: ClauseName, arity: usize, idx: usize) +fn call_at_index(machine_st: &mut MachineState, arity: usize, idx: usize) { machine_st.cp.assign_if_local(machine_st.p.clone() + 1); machine_st.num_of_args = arity; machine_st.b0 = machine_st.b; - machine_st.p = dir_entry!(idx, module_name); + machine_st.p = dir_entry!(idx); } -fn execute_at_index(machine_st: &mut MachineState, module_name: ClauseName, arity: usize, idx: usize) +fn execute_at_index(machine_st: &mut MachineState, arity: usize, idx: usize) { machine_st.num_of_args = arity; machine_st.b0 = machine_st.b; - machine_st.p = dir_entry!(idx, module_name); + machine_st.p = dir_entry!(idx); } pub(crate) type CallResult = Result<(), Vec>; @@ -457,7 +457,7 @@ pub(crate) trait CallPolicy: Any { if let Some(ref idx) = indices.get_code_index((name.clone(), arity), module_name.clone()) { if let IndexPtr::Index(compiled_tl_index) = idx.0.borrow().0 { - call_at_index(machine_st, module_name, arity, compiled_tl_index); + call_at_index(machine_st, arity, compiled_tl_index); return Ok(()); } } @@ -472,10 +472,8 @@ pub(crate) trait CallPolicy: Any { return Err(machine_st.error_form(MachineError::existence_error(h, name, arity), stub)); }, - IndexPtr::Index(compiled_tl_index) => { - let module_name = idx.0.borrow().1.clone(); - call_at_index(machine_st, module_name, arity, compiled_tl_index) - } + IndexPtr::Index(compiled_tl_index) => + call_at_index(machine_st, arity, compiled_tl_index) } Ok(()) @@ -494,7 +492,7 @@ pub(crate) trait CallPolicy: Any { if let Some(ref idx) = indices.get_code_index((name.clone(), arity), module_name.clone()) { if let IndexPtr::Index(compiled_tl_index) = idx.0.borrow().0 { - execute_at_index(machine_st, module_name, arity, compiled_tl_index); + execute_at_index(machine_st, arity, compiled_tl_index); return Ok(()); } } @@ -509,10 +507,8 @@ pub(crate) trait CallPolicy: Any { return Err(machine_st.error_form(MachineError::existence_error(h, name, arity), stub)); }, - IndexPtr::Index(compiled_tl_index) => { - let module_name = idx.0.borrow().1.clone(); - execute_at_index(machine_st, module_name, arity, compiled_tl_index); - } + IndexPtr::Index(compiled_tl_index) => + execute_at_index(machine_st, arity, compiled_tl_index) } Ok(()) @@ -929,7 +925,6 @@ impl SCCCutPolicy { fn run_cleaners(&self, machine_st: &mut MachineState) -> bool { if let Some(&(_, b_cutoff, prev_block)) = self.cont_pts.last() { if machine_st.b < b_cutoff { - let builtins = clause_name!("builtins"); let (idx, arity) = if machine_st.block < prev_block { (self.r_c_w_h, 0) } else { @@ -938,9 +933,9 @@ impl SCCCutPolicy { }; if machine_st.last_call { - execute_at_index(machine_st, builtins, arity, idx); + execute_at_index(machine_st, arity, idx); } else { - call_at_index(machine_st, builtins, arity, idx); + call_at_index(machine_st, arity, idx); } return true; diff --git a/src/prolog/machine/mod.rs b/src/prolog/machine/mod.rs index e9249983..68cc08ec 100644 --- a/src/prolog/machine/mod.rs +++ b/src/prolog/machine/mod.rs @@ -84,7 +84,7 @@ impl Index for Machine { &None => panic!("Out-of-bounds top level index.") } }, - LocalCodePtr::DirEntry(p, _) => &self.code[p], + LocalCodePtr::DirEntry(p) => &self.code[p], LocalCodePtr::UserTermExpansion(p) => &self.term_expanders[p] } } @@ -281,7 +281,7 @@ impl Machine { &Some(ref cq) => Some(cq[p].clone()), &None => None }, - CodePtr::Local(LocalCodePtr::DirEntry(p, _)) => + CodePtr::Local(LocalCodePtr::DirEntry(p)) => Some(self.code[p].clone()), CodePtr::BuiltInClause(built_in, _) => Some(call_clause!(ClauseType::BuiltIn(built_in.clone()), built_in.arity(), @@ -370,7 +370,7 @@ impl Machine { } match self.ms.p { - CodePtr::Local(LocalCodePtr::DirEntry(p, _)) if p < self.code.len() => {}, + CodePtr::Local(LocalCodePtr::DirEntry(p)) if p < self.code.len() => {}, CodePtr::Local(LocalCodePtr::UserTermExpansion(p)) if p < self.term_expanders.len() => {}, CodePtr::Local(LocalCodePtr::UserTermExpansion(_)) => self.ms.fail = true, CodePtr::Local(_) => break, diff --git a/src/prolog/macros.rs b/src/prolog/macros.rs index 69f86b3b..c99c79fa 100644 --- a/src/prolog/macros.rs +++ b/src/prolog/macros.rs @@ -195,8 +195,8 @@ macro_rules! return_from_clause { } macro_rules! dir_entry { - ($idx:expr, $module_name:expr) => ( - CodePtr::Local(LocalCodePtr::DirEntry($idx, $module_name)) + ($idx:expr) => ( + CodePtr::Local(LocalCodePtr::DirEntry($idx)) ) }