remove DynamicIs

This commit is contained in:
Mark Thom
2018-03-17 15:01:31 -06:00
parent d8bcf47462
commit 64ab9a0337
5 changed files with 12 additions and 14 deletions

View File

@@ -1236,7 +1236,6 @@ pub enum ControlInstruction {
CallClause(ClauseType, usize, usize, bool), // name, arity, perm_vars after threshold, last call.
CheckCpExecute,
Deallocate,
DynamicIs,
GetCleanerCall,
Goto(usize, usize, bool), // p, arity, last call.
IsClause(bool, RegType, ArithmeticTerm), // last call, register of var, term.
@@ -1248,7 +1247,6 @@ impl ControlInstruction {
pub fn is_jump_instr(&self) -> bool {
match self {
&ControlInstruction::CallClause(..) => true,
&ControlInstruction::DynamicIs => true,
&ControlInstruction::GetCleanerCall => true,
&ControlInstruction::Goto(..) => true,
&ControlInstruction::IsClause(..) => true,

View File

@@ -127,8 +127,6 @@ impl fmt::Display for ControlInstruction {
write!(f, "is_call {}, {}", r, at),
&ControlInstruction::IsClause(true, r, ref at) =>
write!(f, "is_execute {}, {}", r, at),
&ControlInstruction::DynamicIs =>
write!(f, "call_is"),
&ControlInstruction::JmpBy(arity, offset, pvs, false) =>
write!(f, "jmp_by_call {}/{}, {}", offset, arity, pvs),
&ControlInstruction::JmpBy(arity, offset, pvs, true) =>

View File

@@ -523,7 +523,16 @@ pub(crate) trait CallPolicy: Any {
machine_st.goto_ptr(CodePtr::DirEntry(294, clause_name!("builtin")), 3, lco);
Ok(())
},
_ => panic!("(is)/2 or an inlined command: should have been superseded by previous clause.")
&ClauseType::Is => {
let a = machine_st[temp_v!(1)].clone();
let result = machine_st.arith_eval_by_metacall(temp_v!(2))?;
machine_st.unify(a, Addr::Con(Constant::Number(result)));
machine_st.p += 1;
Ok(())
},
_ => panic!("inlined command: should have been superseded by previous clause.")
}
}
}

View File

@@ -304,7 +304,7 @@ impl MachineState {
Rc::new(BigInt::from_signed_bytes_le(&f(&u_n1, &u_n2).to_bytes_le()))
}
fn arith_eval_by_metacall(&self, r: RegType) -> Result<Number, Vec<HeapCellValue>>
pub(super) fn arith_eval_by_metacall(&self, r: RegType) -> Result<Number, Vec<HeapCellValue>>
{
let instantiation_err = functor!("instantiation_error", 1, [heap_atom!("(is)/2")]);
let a = self[r].clone();
@@ -1873,13 +1873,6 @@ impl MachineState {
self.p += 1;
},
&ControlInstruction::DynamicIs => {
let a = self[temp_v!(1)].clone();
let result = try_or_fail!(self, self.arith_eval_by_metacall(temp_v!(2)));
self.unify(a, Addr::Con(Constant::Number(result)));
self.p += 1;
},
&ControlInstruction::GetCleanerCall => {
let dest = self[temp_v!(1)].clone();

View File

@@ -498,7 +498,7 @@ macro_rules! display {
macro_rules! dynamic_is {
() => (
Line::Control(ControlInstruction::DynamicIs)
Line::Control(ControlInstruction::CallClause(ClauseType::Is, 2, 0, false))
)
}