machine_st.registers[i] = machine_st.or_stack[b][i].clone();
}
- machine_st.pop_stack_frames();
-
+ let old_e = machine_st.e;
+
machine_st.num_of_args = n;
machine_st.e = machine_st.or_stack[b].e;
machine_st.cp = machine_st.or_stack[b].cp.clone();
machine_st.unwind_trail(old_tr, curr_tr);
machine_st.tr = machine_st.or_stack[b].tr;
+ machine_st.pop_stack_frames(old_e);
+
machine_st.trail.truncate(machine_st.tr);
let old_pstr_tr = machine_st.or_stack[b].pstr_tr;
machine_st.registers[i] = machine_st.or_stack[b][i].clone();
}
- machine_st.pop_stack_frames();
+ let old_e = machine_st.e;
machine_st.num_of_args = n;
machine_st.e = machine_st.or_stack[b].e;
machine_st.unwind_trail(old_tr, curr_tr);
machine_st.tr = machine_st.or_stack[b].tr;
+ machine_st.pop_stack_frames(old_e);
+
machine_st.trail.truncate(machine_st.tr);
let old_pstr_tr = machine_st.or_stack[b].pstr_tr;
self.p += 1;
}
- pub(super) fn pop_stack_frames(&mut self) {
- if self.and_stack.len() > self.e {
- let and_gi = self.and_stack[self.e].global_index;
+ pub(super) fn pop_stack_frames(&mut self, e: usize) {
+ if self.and_stack.len() > e {
+ let and_gi = self.and_stack[e].global_index;
let or_gi = self
.or_stack
.top()
.unwrap_or(0);
if and_gi > or_gi {
- self.and_stack.truncate(self.e + 1);
+ self.and_stack.truncate(e + 1);
}
}
}