From 6308aa7a1e22c5a0f34f75c3f53a6835e550b493 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 7 Apr 2019 11:44:56 -0600 Subject: [PATCH] re: conformity test #181 --- Cargo.toml | 2 +- src/prolog/heap_print.rs | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 73566b4f..fe8d4343 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "scryer-prolog" -version = "0.8.47" +version = "0.8.48" authors = ["Mark Thom "] repository = "https://github.com/mthom/scryer-prolog" description = "A modern Prolog implementation written mostly in Rust." diff --git a/src/prolog/heap_print.rs b/src/prolog/heap_print.rs index 496ffa9d..78abd8d4 100644 --- a/src/prolog/heap_print.rs +++ b/src/prolog/heap_print.rs @@ -414,7 +414,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> "-" | "\\" => { self.format_prefix_op_with_space(ct.name(), spec); return; - }, + } _ => {} }; @@ -423,6 +423,14 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> self.state_stack.push(TokenOrRedirect::CompositeRedirect(left_directed_op)); self.state_stack.push(TokenOrRedirect::Op(ct.name(), spec)); } else { // if is_infix!(spec.assoc()) + match ct.name().as_str() { + "|" => { + self.format_infix_op_with_space(ct.name(), spec); + return; + }, + _ => {} + }; + let left_directed_op = DirectedOp::Left(ct.name(), spec.clone()); let right_directed_op = DirectedOp::Right(ct.name(), spec.clone()); @@ -456,6 +464,18 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> self.state_stack.push(TokenOrRedirect::Atom(name)); } + fn format_infix_op_with_space(&mut self, name: ClauseName, spec: SharedOpDesc) + { + let left_directed_op = DirectedOp::Left(name.clone(), spec.clone()); + let right_directed_op = DirectedOp::Right(name.clone(), spec.clone()); + + self.state_stack.push(TokenOrRedirect::CompositeRedirect(left_directed_op)); + self.state_stack.push(TokenOrRedirect::Space); + self.state_stack.push(TokenOrRedirect::Op(name.clone(), spec)); + self.state_stack.push(TokenOrRedirect::Space); + self.state_stack.push(TokenOrRedirect::CompositeRedirect(right_directed_op)); + } + fn format_curly_braces(&mut self) { self.state_stack.push(TokenOrRedirect::RightCurly); -- 2.54.0