From: Mark Thom Date: Thu, 30 Aug 2018 06:04:19 +0000 (-0600) Subject: correct printing of lists when double_quotes is set to atom X-Git-Tag: v0.8.110~412 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=872b153b086e1e4bd0ca07db510131792a000bc3;p=scryer-prolog.git correct printing of lists when double_quotes is set to atom --- diff --git a/src/prolog/heap_print.rs b/src/prolog/heap_print.rs index a7ae573b..14c5134f 100644 --- a/src/prolog/heap_print.rs +++ b/src/prolog/heap_print.rs @@ -339,8 +339,10 @@ impl<'a, Formatter: HCValueFormatter, Outputter: HCValueOutputter> } // self.expand_char_list(s); } else { // for now, == DoubleQuotes::Atom + let borrowed_str = s.borrow(); + self.outputter.append("\""); - self.outputter.append(s.borrow().as_str()); + self.outputter.append(&borrowed_str[s.cursor() ..]); self.outputter.append("\""); }, Constant::Usize(i) => diff --git a/src/prolog/read.rs b/src/prolog/read.rs index 20eba1a0..2390d153 100644 --- a/src/prolog/read.rs +++ b/src/prolog/read.rs @@ -49,7 +49,7 @@ impl<'a> Reader<'a> { }; } } - + fn push_stub_addr(&mut self) { let h = self.machine_st.heap.h; self.machine_st.heap.push(HeapCellValue::Addr(Addr::HeapCell(h))); diff --git a/src/prolog/string_list.rs b/src/prolog/string_list.rs index b4676765..4a623ef3 100644 --- a/src/prolog/string_list.rs +++ b/src/prolog/string_list.rs @@ -64,6 +64,11 @@ impl StringList { } } + #[inline] + pub fn cursor(&self) -> usize { + self.cursor + } + #[inline] pub fn head(&self) -> Option { self.borrow()[self.cursor ..].chars().next() diff --git a/src/tests.rs b/src/tests.rs index 2fa8d1a8..321f2874 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1786,4 +1786,9 @@ fn test_queries_on_string_lists() assert_prolog_success!(&mut wam, "?- matcher(X, Y).", [["X = [a, b, c | _1]", "Y = _1"]]); assert_prolog_failure!(&mut wam, "?- matcher(\"abcdef\", Y)."); + + submit(&mut wam, "?- set_prolog_flag(double_quotes, chars)."); + + assert_prolog_success!(&mut wam, "?- X = \"abc\", X = ['a' | Y], set_prolog_flag(double_quotes, atom).", + [["X = \"abc\"", "Y = \"bc\""]]); }