From 8a9cd7779c43be03049a4c012d8f162d50c3eee5 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 20 Aug 2022 20:28:49 -0600 Subject: [PATCH] offset into complete strings with '$skip_max_list'/4 (#1529) --- src/machine/system_calls.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 5ce4ff89..7690c37f 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -579,7 +579,19 @@ impl MachineState { self.finalize_skip_max_list(n as i64, list_loc_as_cell!(l)); } CycleSearchResult::UntouchedCStr(cstr_atom, n) => { - self.finalize_skip_max_list(n as i64, string_as_cstr_cell!(cstr_atom)); + let cell = if n > 0 { + let h = self.heap.len(); + + self.heap.push(string_as_cstr_cell!(cstr_atom)); + self.heap.push(pstr_offset_as_cell!(h)); + self.heap.push(fixnum_as_cell!(Fixnum::build_with(n as i64))); + + pstr_loc_as_cell!(h+1) + } else { + string_as_cstr_cell!(cstr_atom) + }; + + self.finalize_skip_max_list(n as i64, cell); } CycleSearchResult::EmptyList => { self.finalize_skip_max_list(0, empty_list_as_cell!()); -- 2.54.0