From: Mark Thom Date: Sun, 21 Aug 2022 02:28:49 +0000 (-0600) Subject: offset into complete strings with '$skip_max_list'/4 (#1529) X-Git-Tag: v0.9.1^2~33 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=8a9cd7779c43be03049a4c012d8f162d50c3eee5;p=scryer-prolog.git offset into complete strings with '$skip_max_list'/4 (#1529) --- 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!());