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.
|
CallClause(ClauseType, usize, usize, bool), // name, arity, perm_vars after threshold, last call.
|
||||||
CheckCpExecute,
|
CheckCpExecute,
|
||||||
Deallocate,
|
Deallocate,
|
||||||
DynamicIs,
|
|
||||||
GetCleanerCall,
|
GetCleanerCall,
|
||||||
Goto(usize, usize, bool), // p, arity, last call.
|
Goto(usize, usize, bool), // p, arity, last call.
|
||||||
IsClause(bool, RegType, ArithmeticTerm), // last call, register of var, term.
|
IsClause(bool, RegType, ArithmeticTerm), // last call, register of var, term.
|
||||||
@@ -1248,7 +1247,6 @@ impl ControlInstruction {
|
|||||||
pub fn is_jump_instr(&self) -> bool {
|
pub fn is_jump_instr(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
&ControlInstruction::CallClause(..) => true,
|
&ControlInstruction::CallClause(..) => true,
|
||||||
&ControlInstruction::DynamicIs => true,
|
|
||||||
&ControlInstruction::GetCleanerCall => true,
|
&ControlInstruction::GetCleanerCall => true,
|
||||||
&ControlInstruction::Goto(..) => true,
|
&ControlInstruction::Goto(..) => true,
|
||||||
&ControlInstruction::IsClause(..) => true,
|
&ControlInstruction::IsClause(..) => true,
|
||||||
|
|||||||
@@ -127,8 +127,6 @@ impl fmt::Display for ControlInstruction {
|
|||||||
write!(f, "is_call {}, {}", r, at),
|
write!(f, "is_call {}, {}", r, at),
|
||||||
&ControlInstruction::IsClause(true, r, ref at) =>
|
&ControlInstruction::IsClause(true, r, ref at) =>
|
||||||
write!(f, "is_execute {}, {}", r, at),
|
write!(f, "is_execute {}, {}", r, at),
|
||||||
&ControlInstruction::DynamicIs =>
|
|
||||||
write!(f, "call_is"),
|
|
||||||
&ControlInstruction::JmpBy(arity, offset, pvs, false) =>
|
&ControlInstruction::JmpBy(arity, offset, pvs, false) =>
|
||||||
write!(f, "jmp_by_call {}/{}, {}", offset, arity, pvs),
|
write!(f, "jmp_by_call {}/{}, {}", offset, arity, pvs),
|
||||||
&ControlInstruction::JmpBy(arity, offset, pvs, true) =>
|
&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);
|
machine_st.goto_ptr(CodePtr::DirEntry(294, clause_name!("builtin")), 3, lco);
|
||||||
Ok(())
|
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()))
|
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 instantiation_err = functor!("instantiation_error", 1, [heap_atom!("(is)/2")]);
|
||||||
let a = self[r].clone();
|
let a = self[r].clone();
|
||||||
@@ -1873,13 +1873,6 @@ impl MachineState {
|
|||||||
|
|
||||||
self.p += 1;
|
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 => {
|
&ControlInstruction::GetCleanerCall => {
|
||||||
let dest = self[temp_v!(1)].clone();
|
let dest = self[temp_v!(1)].clone();
|
||||||
|
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ macro_rules! display {
|
|||||||
|
|
||||||
macro_rules! dynamic_is {
|
macro_rules! dynamic_is {
|
||||||
() => (
|
() => (
|
||||||
Line::Control(ControlInstruction::DynamicIs)
|
Line::Control(ControlInstruction::CallClause(ClauseType::Is, 2, 0, false))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user