remove DynamicIs
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
@@ -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.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -498,7 +498,7 @@ macro_rules! display {
|
||||
|
||||
macro_rules! dynamic_is {
|
||||
() => (
|
||||
Line::Control(ControlInstruction::DynamicIs)
|
||||
Line::Control(ControlInstruction::CallClause(ClauseType::Is, 2, 0, false))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user