remove module name from DirEntry
This commit is contained in:
@@ -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<CodePtr> for CodePtr {
|
||||
impl PartialOrd<LocalCodePtr> for LocalCodePtr {
|
||||
fn partial_cmp(&self, other: &LocalCodePtr) -> Option<Ordering> {
|
||||
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<usize> 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<usize> 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<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 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;
|
||||
|
||||
@@ -84,7 +84,7 @@ impl Index<LocalCodePtr> 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,
|
||||
|
||||
@@ -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))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user