avoid pushing stack variables to the heap in get_continuation_chunk (#1644)

This commit is contained in:
Mark Thom
2022-12-05 23:17:15 -07:00
parent e1dc114517
commit d383e5eb8b

View File

@@ -4336,7 +4336,21 @@ impl Machine {
let mut addrs = vec![];
for idx in 1..num_cells + 1 {
addrs.push(self.machine_st.stack[stack_loc!(AndFrame, e, idx)]);
let addr = self.machine_st.stack[stack_loc!(AndFrame, e, idx)];
let addr = self.machine_st.store(self.machine_st.deref(addr));
// avoid pushing stack variables to the heap where they
// must not go.
if addr.is_stack_var() {
let h = self.machine_st.heap.len();
self.machine_st.heap.push(heap_loc_as_cell!(h));
self.machine_st.bind(Ref::heap_cell(h), addr);
addrs.push(heap_loc_as_cell!(h));
} else {
addrs.push(addr);
}
}
let chunk = str_loc_as_cell!(self.machine_st.heap.len());