}
}
-#[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)
}
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),
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)
}
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
}
}
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>>;
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(());
}
}
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(())
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(());
}
}
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(())
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 {
};
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;
&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]
}
}
&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(),
}
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,