From d383e5eb8b648d9511705f507ad9d122e78592a4 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Mon, 5 Dec 2022 23:17:15 -0700 Subject: [PATCH] avoid pushing stack variables to the heap in get_continuation_chunk (#1644) --- src/machine/system_calls.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index f249f655..0006f53f 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -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()); -- 2.54.0