refine is/2 compilation so errors are thrown when expected without needlessly allocating (#1974, #1984)
This commit is contained in:
@@ -1497,6 +1497,14 @@ impl Machine {
|
||||
try_or_throw!(self.machine_st, self.machine_st.is(r, at));
|
||||
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
|
||||
}
|
||||
Instruction::DefaultCallGetNumber(at) => {
|
||||
try_or_throw!(self.machine_st, self.machine_st.get_number(at));
|
||||
step_or_fail!(self, self.machine_st.p += 1);
|
||||
}
|
||||
Instruction::DefaultExecuteGetNumber(at) => {
|
||||
try_or_throw!(self.machine_st, self.machine_st.get_number(at));
|
||||
step_or_fail!(self, self.machine_st.p = self.machine_st.cp);
|
||||
}
|
||||
&Instruction::CallAcyclicTerm => {
|
||||
let addr = self.machine_st.registers[1];
|
||||
|
||||
@@ -1965,6 +1973,34 @@ impl Machine {
|
||||
self.machine_st.p = self.machine_st.cp;
|
||||
}
|
||||
}
|
||||
Instruction::CallGetNumber(at) => {
|
||||
try_or_throw!(self.machine_st, self.machine_st.get_number(at));
|
||||
|
||||
if self.machine_st.fail {
|
||||
self.machine_st.backtrack();
|
||||
} else {
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
|
||||
self.machine_st.p += 1;
|
||||
}
|
||||
}
|
||||
Instruction::ExecuteGetNumber(at) => {
|
||||
try_or_throw!(self.machine_st, self.machine_st.get_number(at));
|
||||
|
||||
if self.machine_st.fail {
|
||||
self.machine_st.backtrack();
|
||||
} else {
|
||||
try_or_throw!(
|
||||
self.machine_st,
|
||||
(self.machine_st.increment_call_count_fn)(&mut self.machine_st)
|
||||
);
|
||||
|
||||
self.machine_st.p = self.machine_st.cp;
|
||||
}
|
||||
}
|
||||
&Instruction::CallN(arity) => {
|
||||
let pred = self.machine_st.registers[1];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user