]> Repositorios git - scryer-prolog.git/commitdiff
correct printing of lists when double_quotes is set to atom
authorMark Thom <[email protected]>
Thu, 30 Aug 2018 06:04:19 +0000 (00:04 -0600)
committerMark Thom <[email protected]>
Thu, 30 Aug 2018 06:04:19 +0000 (00:04 -0600)
src/prolog/heap_print.rs
src/prolog/read.rs
src/prolog/string_list.rs
src/tests.rs

index a7ae573befab81bda4ef4a43b7ec76f5ba5b5de7..14c5134f61f9d8f136ae1523e7ba6a2ca8911341 100644 (file)
@@ -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) =>
index 20eba1a06d292de123d337ee2698f2a20792d5f7..2390d1536b81c0751de591a6ba27b62bdc42aca5 100644 (file)
@@ -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)));
index b467676583978723d3fdf90a2770ec87bfe37f53..4a623ef350f7a0f32a4ab2686ee003730dbc8de5 100644 (file)
@@ -64,6 +64,11 @@ impl StringList {
         }
     }
 
+    #[inline]
+    pub fn cursor(&self) -> usize {
+        self.cursor
+    }        
+    
     #[inline]
     pub fn head(&self) -> Option<char> {
         self.borrow()[self.cursor ..].chars().next()
index 2fa8d1a81be3141542a169d2813a9300e51c864a..321f2874e5f788d7261f4c9fd90c39384ca9dec9 100644 (file)
@@ -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\""]]);
 }