cache ball terms before unifying in handle_ball/3 (#1608)

This commit is contained in:
Mark Thom
2022-10-22 22:56:06 -06:00
parent f2940ddfcf
commit 8781e03863
8 changed files with 87 additions and 37 deletions

View File

@@ -4804,11 +4804,6 @@ impl Machine {
}
}
#[inline(always)]
pub(crate) fn erase_ball(&mut self) {
self.machine_st.ball.reset();
}
#[inline(always)]
pub(crate) fn get_ball(&mut self) {
let addr = self.machine_st.store(self.machine_st.deref(self.machine_st.registers[1]));
@@ -4828,6 +4823,29 @@ impl Machine {
};
}
#[inline(always)]
pub(crate) fn push_ball_stack(&mut self) {
if self.machine_st.ball.stub.len() > 0 {
self.machine_st.ball_stack.push(
mem::replace(&mut self.machine_st.ball, Ball::new())
);
} else {
self.machine_st.fail = true;
}
}
#[inline(always)]
pub(crate) fn pop_ball_stack(&mut self) {
self.machine_st.ball_stack.pop();
}
#[inline(always)]
pub(crate) fn pop_from_ball_stack(&mut self) {
if let Some(ball) = self.machine_st.ball_stack.pop() {
self.machine_st.ball = ball;
}
}
#[inline(always)]
pub(crate) fn get_current_block(&mut self) {
let n = Fixnum::build_with(i64::try_from(self.machine_st.block).unwrap());