From: Mark Thom Date: Fri, 29 Mar 2019 06:14:03 +0000 (-0600) Subject: pass more conformity tests X-Git-Tag: v0.8.110~147 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=3aeebbe6d61b63153e9ae092df4a2beaafac4660;p=scryer-prolog.git pass more conformity tests --- diff --git a/Cargo.toml b/Cargo.toml index ca7f135c..ed38a9a3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "scryer-prolog" -version = "0.8.21" +version = "0.8.22" authors = ["Mark Thom "] 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" diff --git a/src/prolog/heap_print.rs b/src/prolog/heap_print.rs index 9f9d7ff1..54fdd6b5 100644 --- a/src/prolog/heap_print.rs +++ b/src/prolog/heap_print.rs @@ -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); }, diff --git a/src/tests.rs b/src/tests.rs index 94c0454b..a470bfd7 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -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 = [.,.(.,.,.)].",