]> Repositorios git - scryer-prolog.git/commitdiff
pass more conformity tests
authorMark Thom <[email protected]>
Fri, 29 Mar 2019 06:14:03 +0000 (00:14 -0600)
committerMark Thom <[email protected]>
Fri, 29 Mar 2019 06:14:03 +0000 (00:14 -0600)
Cargo.toml
src/prolog/heap_print.rs
src/tests.rs

index ca7f135c61ccecd28bab3fd7d456dc4961f243f9..ed38a9a3507a30750713ab887f2e356e454cc61d 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "scryer-prolog"
-version = "0.8.21"
+version = "0.8.22"
 authors = ["Mark Thom <[email protected]>"]
 repository = "https://github.com/mthom/scryer-prolog"
 description = "A modern Prolog implementation written mostly in Rust."
@@ -14,7 +14,7 @@ cfg-if = "0.1.7"
 downcast = "0.9.1"
 num = "0.2"
 ordered-float = "0.5.0"
-prolog_parser = "0.8.2"
+prolog_parser = "0.8.3"
 readline_rs_compat = { version = "0.1.7", optional = true }
 ref_thread_local = "0.0.0"
 
index 9f9d7ff17596781810c4018a0393abb065267369..54fdd6b5c4dab91a711cc76d7cd7c9678c043e22 100644 (file)
@@ -204,6 +204,8 @@ fn continues_with_append(atom: &str, op: &str) -> bool {
                 alpha_numeric_char!(oc)
             } else if capital_letter_char!(ac) {
                 alpha_numeric_char!(oc)
+            } else if sign_char!(ac) {
+                sign_char!(oc) || decimal_digit_char!(oc)
             } else {
                 false
             }
@@ -437,25 +439,27 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
     }
 
     fn print_atom(&mut self, atom: &ClauseName, spec: Option<(usize, Specifier)>) {
-        match atom.as_str() {
-            "" => self.append_str("''"),
-            ";" | "!" => self.append_str(atom.as_str()),
-            s => if spec.is_some() || !self.quoted || non_quoted_token(s.chars()) {
-                self.append_str(atom.as_str())
-            } else {
-                if self.quoted {
-                    self.push_char('\'');
-                }
+        push_space_if_amb!(self, atom.as_str(), {
+            match atom.as_str() {
+                "" => self.append_str("''"),
+                ";" | "!" => self.append_str(atom.as_str()),
+                s => if spec.is_some() || !self.quoted || non_quoted_token(s.chars()) {
+                    self.append_str(atom.as_str());
+                } else {
+                    if self.quoted {
+                        self.push_char('\'');
+                    }
 
-                for c in atom.as_str().chars() {
-                    self.print_char(c);
-                }
+                    for c in atom.as_str().chars() {
+                        self.print_char(c);
+                    }
 
-                if self.quoted {
-                    self.push_char('\'');
+                    if self.quoted {
+                        self.push_char('\'');
+                    }
                 }
             }
-        }
+        });
     }
 
     fn print_char(&mut self, c: char) {
@@ -468,7 +472,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
             '\u{08}' => self.append_str("\\b"), // UTF-8 backspace
             '\u{07}' => self.append_str("\\a"), // UTF-8 alert
             '\x20' ... '\x7e' => self.push_char(c),
-            _ => self.append_str(&format!("\\x{:x}", c as u32))
+            _ => self.append_str(&format!("\\x{:x}\\", c as u32))
         };
     }
 
@@ -518,7 +522,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
                         self.append_str(&output_str.trim());
                     });
                 },
-            Constant::Number(n) => {
+            Constant::Number(n) => {                
                 let output_str = format!("{}", n);
 
                 push_space_if_amb!(self, &output_str, {
@@ -600,7 +604,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
                     let ct = ClauseType::from(name, 0, fixity);
                     self.format_clause(iter, 0, ct);
                 }),
-            HeapCellValue::NamedStr(arity, name, fixity) => {
+            HeapCellValue::NamedStr(arity, name, fixity) => {                    
                 let ct = ClauseType::from(name, arity, fixity);
                 self.format_clause(iter, arity, ct);
             },
index 94c0454bbe71bdb2086575d9bf4d08c4c09c2648..a470bfd7028af98dd1445899163b1f3fabdb21be 100644 (file)
@@ -1668,6 +1668,9 @@ fn test_queries_on_builtins()
     assert_prolog_success!(&mut wam, "?- call_with_inference_limit((setup_call_cleanup(S=1,(G=2;fail),writeq(S+G>B)), B=3, !), 10, R).",
                            [["S = _1", "G = _4", "B = _14", "R = inference_limit_exceeded"]]);
 
+    assert_prolog_success!(&mut wam, "?- X = '\\033\\'.",
+                           [["X = '\\x1b\\'"]]);
+    
     assert_prolog_success!(&mut wam, "?- X = '\\n'.",
                            [["X = '\\n'"]]);
     assert_prolog_success!(&mut wam, "?- X = '\\b'.",
@@ -1681,6 +1684,9 @@ fn test_queries_on_builtins()
     assert_prolog_success!(&mut wam, "?- X = '\\b\\r\\f\\t\\n'.",
                            [["X = '\\b\\r\\f\\t\\n'"]]);
 
+    assert_prolog_success!(&mut wam, "?- (- (1)) = -(1).");
+    assert_prolog_success!(&mut wam, "?- (- -1) = -(-1).");
+    
     assert_prolog_success!(&mut wam, "?- X = ((*)=(*)).",
                            [["X = ((*)=(*))"]]);
     assert_prolog_success!(&mut wam, "?- X = [.,.(.,.,.)].",