remove module name from DirEntry

This commit is contained in:
Mark Thom
2018-10-02 20:37:15 -06:00
parent 5792990dff
commit 61536d2004
4 changed files with 22 additions and 27 deletions

View File

@@ -858,9 +858,9 @@ impl CodePtr {
} }
} }
#[derive(Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub enum LocalCodePtr { pub enum LocalCodePtr {
DirEntry(usize, ClauseName), // offset, resident module name. DirEntry(usize), // offset.
TopLevel(usize, usize), // chunk_num, offset. TopLevel(usize, usize), // chunk_num, offset.
UserTermExpansion(usize) UserTermExpansion(usize)
} }
@@ -886,7 +886,7 @@ impl PartialOrd<CodePtr> for CodePtr {
impl PartialOrd<LocalCodePtr> for LocalCodePtr { impl PartialOrd<LocalCodePtr> for LocalCodePtr {
fn partial_cmp(&self, other: &LocalCodePtr) -> Option<Ordering> { fn partial_cmp(&self, other: &LocalCodePtr) -> Option<Ordering> {
match (self, other) { match (self, other) {
(&LocalCodePtr::DirEntry(p1, _), &LocalCodePtr::DirEntry(p2, _)) => (&LocalCodePtr::DirEntry(p1), &LocalCodePtr::DirEntry(p2)) =>
p1.partial_cmp(&p2), p1.partial_cmp(&p2),
(&LocalCodePtr::DirEntry(..), &LocalCodePtr::TopLevel(_, _)) => (&LocalCodePtr::DirEntry(..), &LocalCodePtr::TopLevel(_, _)) =>
Some(Ordering::Less), Some(Ordering::Less),
@@ -914,7 +914,7 @@ impl Add<usize> for LocalCodePtr {
fn add(self, rhs: usize) -> Self::Output { fn add(self, rhs: usize) -> Self::Output {
match self { 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::TopLevel(cn, p) => LocalCodePtr::TopLevel(cn, p + rhs),
LocalCodePtr::UserTermExpansion(p) => LocalCodePtr::UserTermExpansion(p + rhs) LocalCodePtr::UserTermExpansion(p) => LocalCodePtr::UserTermExpansion(p + rhs)
} }
@@ -925,7 +925,7 @@ impl AddAssign<usize> for LocalCodePtr {
fn add_assign(&mut self, rhs: usize) { fn add_assign(&mut self, rhs: usize) {
match self { match self {
&mut LocalCodePtr::UserTermExpansion(ref mut p) &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 | &mut LocalCodePtr::TopLevel(_, ref mut p) => *p += rhs
} }
} }

View File

@@ -260,19 +260,19 @@ pub struct MachineState {
pub(crate) flags: MachineFlags 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.cp.assign_if_local(machine_st.p.clone() + 1);
machine_st.num_of_args = arity; machine_st.num_of_args = arity;
machine_st.b0 = machine_st.b; 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.num_of_args = arity;
machine_st.b0 = machine_st.b; 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<HeapCellValue>>; pub(crate) type CallResult = Result<(), Vec<HeapCellValue>>;
@@ -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 Some(ref idx) = indices.get_code_index((name.clone(), arity), module_name.clone())
{ {
if let IndexPtr::Index(compiled_tl_index) = idx.0.borrow().0 { 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(()); return Ok(());
} }
} }
@@ -472,10 +472,8 @@ pub(crate) trait CallPolicy: Any {
return Err(machine_st.error_form(MachineError::existence_error(h, name, arity), return Err(machine_st.error_form(MachineError::existence_error(h, name, arity),
stub)); stub));
}, },
IndexPtr::Index(compiled_tl_index) => { IndexPtr::Index(compiled_tl_index) =>
let module_name = idx.0.borrow().1.clone(); call_at_index(machine_st, arity, compiled_tl_index)
call_at_index(machine_st, module_name, arity, compiled_tl_index)
}
} }
Ok(()) 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 Some(ref idx) = indices.get_code_index((name.clone(), arity), module_name.clone())
{ {
if let IndexPtr::Index(compiled_tl_index) = idx.0.borrow().0 { 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(()); return Ok(());
} }
} }
@@ -509,10 +507,8 @@ pub(crate) trait CallPolicy: Any {
return Err(machine_st.error_form(MachineError::existence_error(h, name, arity), return Err(machine_st.error_form(MachineError::existence_error(h, name, arity),
stub)); stub));
}, },
IndexPtr::Index(compiled_tl_index) => { IndexPtr::Index(compiled_tl_index) =>
let module_name = idx.0.borrow().1.clone(); execute_at_index(machine_st, arity, compiled_tl_index)
execute_at_index(machine_st, module_name, arity, compiled_tl_index);
}
} }
Ok(()) Ok(())
@@ -929,7 +925,6 @@ impl SCCCutPolicy {
fn run_cleaners(&self, machine_st: &mut MachineState) -> bool { fn run_cleaners(&self, machine_st: &mut MachineState) -> bool {
if let Some(&(_, b_cutoff, prev_block)) = self.cont_pts.last() { if let Some(&(_, b_cutoff, prev_block)) = self.cont_pts.last() {
if machine_st.b < b_cutoff { if machine_st.b < b_cutoff {
let builtins = clause_name!("builtins");
let (idx, arity) = if machine_st.block < prev_block { let (idx, arity) = if machine_st.block < prev_block {
(self.r_c_w_h, 0) (self.r_c_w_h, 0)
} else { } else {
@@ -938,9 +933,9 @@ impl SCCCutPolicy {
}; };
if machine_st.last_call { if machine_st.last_call {
execute_at_index(machine_st, builtins, arity, idx); execute_at_index(machine_st, arity, idx);
} else { } else {
call_at_index(machine_st, builtins, arity, idx); call_at_index(machine_st, arity, idx);
} }
return true; return true;

View File

@@ -84,7 +84,7 @@ impl Index<LocalCodePtr> for Machine {
&None => panic!("Out-of-bounds top level index.") &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] LocalCodePtr::UserTermExpansion(p) => &self.term_expanders[p]
} }
} }
@@ -281,7 +281,7 @@ impl Machine {
&Some(ref cq) => Some(cq[p].clone()), &Some(ref cq) => Some(cq[p].clone()),
&None => None &None => None
}, },
CodePtr::Local(LocalCodePtr::DirEntry(p, _)) => CodePtr::Local(LocalCodePtr::DirEntry(p)) =>
Some(self.code[p].clone()), Some(self.code[p].clone()),
CodePtr::BuiltInClause(built_in, _) => CodePtr::BuiltInClause(built_in, _) =>
Some(call_clause!(ClauseType::BuiltIn(built_in.clone()), built_in.arity(), Some(call_clause!(ClauseType::BuiltIn(built_in.clone()), built_in.arity(),
@@ -370,7 +370,7 @@ impl Machine {
} }
match self.ms.p { 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(p)) if p < self.term_expanders.len() => {},
CodePtr::Local(LocalCodePtr::UserTermExpansion(_)) => self.ms.fail = true, CodePtr::Local(LocalCodePtr::UserTermExpansion(_)) => self.ms.fail = true,
CodePtr::Local(_) => break, CodePtr::Local(_) => break,

View File

@@ -195,8 +195,8 @@ macro_rules! return_from_clause {
} }
macro_rules! dir_entry { macro_rules! dir_entry {
($idx:expr, $module_name:expr) => ( ($idx:expr) => (
CodePtr::Local(LocalCodePtr::DirEntry($idx, $module_name)) CodePtr::Local(LocalCodePtr::DirEntry($idx))
) )
} }