cache ball terms before unifying in handle_ball/3 (#1608)
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user