]> Repositorios git - scryer-prolog.git/commitdiff
revise iso_conformity_tests.pl in response to new ambiguity check of #1860 iso_conformity_tests origin/iso_conformity_tests
authorMark <[email protected]>
Tue, 4 Jul 2023 18:13:43 +0000 (12:13 -0600)
committerMark <[email protected]>
Tue, 4 Jul 2023 22:12:03 +0000 (16:12 -0600)
src/heap_print.rs
tests-pl/iso-conformity-tests.pl
tests/scryer/issues.rs

index 4e7781b7a7c8fe3a63807b6974e9192767318e4b..7cd8b7133a9924101a50da351455afeca66cdf1c 100644 (file)
@@ -44,6 +44,15 @@ impl DirectedOp {
         }
     }
 
+    #[inline]
+    fn is_prefix(&self )-> bool {
+        match self {
+            &DirectedOp::Left(_name, cell) | &DirectedOp::Right(_name, cell) => {
+                is_prefix!(cell.get_spec() as u32)
+            }
+        }
+    }
+
     #[inline]
     fn is_negative_sign(&self) -> bool {
         match self {
@@ -604,7 +613,6 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
                 self.iter.pop_stack();
 
                 self.state_stack.push(TokenOrRedirect::Atom(atom!("...")));
-                self.state_stack.push(TokenOrRedirect::Space);
                 self.state_stack.push(TokenOrRedirect::Atom(name));
 
                 return;
@@ -613,7 +621,13 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
             let op = DirectedOp::Left(name, spec);
 
             self.state_stack.push(TokenOrRedirect::CompositeRedirect(max_depth, op));
-            self.state_stack.push(TokenOrRedirect::Space);
+
+            /*
+            if fetch_op_spec(name, 2, self.op_dir).is_some() {
+                self.state_stack.push(TokenOrRedirect::Space);
+            }
+            */
+
             self.state_stack.push(TokenOrRedirect::Atom(name));
         } else {
             match name.as_str() {
@@ -938,13 +952,17 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
     }
 
     fn print_number(&mut self, max_depth: usize, n: NumberFocus, op: &Option<DirectedOp>) {
-        let add_brackets = if let Some(op) = op {
-            op.is_negative_sign() && !n.is_negative()
+        let (add_brackets, op_is_prefix) = if let Some(op) = op {
+            (op.is_negative_sign() && !n.is_negative(), op.is_prefix())
         } else {
-            false
+            (false, false)
         };
 
         if add_brackets {
+            if op_is_prefix && !self.outputter.ends_with(" ") {
+                push_char!(self, ' ');
+            }
+
             push_char!(self, '(');
         }
 
@@ -1333,8 +1351,10 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
 
             if let Some(ref op) = &op {
                 if !self.outputter.ends_with(" ") {
-                    if op.is_left() && requires_space(op.as_atom().as_str(), "(") {
-                        self.state_stack.push(TokenOrRedirect::Space);
+                    if op.is_left() {
+                        if op.is_prefix() || requires_space(op.as_atom().as_str(), "(") {
+                            self.state_stack.push(TokenOrRedirect::Space);
+                        }
                     }
                 }
             }
@@ -1457,7 +1477,9 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
                 let mut result = String::new();
 
                 if let Some(ref op) = op {
-                    if printer.outputter.ends_with(&format!(" {}", op.as_atom().as_str())) {
+                    let op_is_prefix = op.is_prefix() && op.is_left();
+
+                    if op_is_prefix || printer.outputter.ends_with(&format!(" {}", op.as_atom().as_str())) {
                         result.push(' ');
                     }
 
index 630b2baaa7f54129ac0ad7701a9090ecac0ddd2a..c86620dabc1ce1b7c7cad8a26c879cb5f15ead78 100644 (file)
@@ -265,31 +265,31 @@ test_218 :- writeq_term_to_chars(-(1*2), Chars),
             Chars == "- (1*2)".
 
 test_140 :- writeq_term_to_chars(-a, Chars),
-            Chars == "- a".
+            Chars == "-a".
 
 test_184 :- writeq_term_to_chars(-(-), Chars),
             Chars == "- (-)".
 
 test_185 :- writeq_term_to_chars(-[-], Chars),
-            Chars == "- [-]".
+            Chars == "-[-]".
 
 test_188 :- writeq_term_to_chars(-p(c), Chars),
-            Chars == "- p(c)".
+            Chars == "-p(c)".
 
 test_189 :- writeq_term_to_chars(-{}, Chars),
-            Chars == "- {}".
+            Chars == "-{}".
 
 test_190 :- writeq_term_to_chars(-{a}, Chars),
-            Chars == "- {a}".
+            Chars == "-{a}".
 
 test_191 :- writeq_term_to_chars(-(-a), Chars),
-            Chars == "- - a".
+            Chars == "- -a".
 
 test_192 :- writeq_term_to_chars(-(-(-a)), Chars),
-            Chars == "- - - a".
+            Chars == "- - -a".
 
-test_216 :- writeq_term_to_chars(-(-1), Chars),
-            Chars == "- -1".
+test_216 :- writeq_term_to_chars(-(-(1)), Chars),
+            Chars == "- - (1)".
 
 test_215_248_249 :-
     setup_call_cleanup(op(100,yfx,~),
@@ -307,14 +307,14 @@ test_215_248_249 :-
 
 test_278 :- setup_call_cleanup(op(9,xfy,.),
                                (  writeq_term_to_chars(-[1], Chars),
-                                  Chars == "- [1]"
+                                  Chars == "-[1]"
                                ),
                                op(0,xfy,.)).
 
 test_279_296 :-
     setup_call_cleanup(op(9,xf,'$VAR'),
                        (  writeq_term_to_chars(-'$VAR'(0), Chars0),
-                          Chars0 == "- A",
+                          Chars0 == "-A",
                           writeq_term_to_chars('$VAR'(0), Chars1),
                           Chars1 == "A"
                        ),
@@ -340,7 +340,7 @@ test_67 :- setup_call_cleanup((  current_op(P,fy,+),
                               op(P,fy,+)).
 
 test_257 :- writeq_term_to_chars([+{a},+[]], Chars),
-            Chars == "[+ {a},+ []]".
+            Chars == "[+{a},+[]]".
 
 test_68 :- [(:-)|(:-)]=[:-|:-].
 
@@ -567,7 +567,7 @@ test_131_132_133 :-
                           C0 == "' op' '1 '",
                           read_from_chars("' op'[].", T1),
                           writeq_term_to_chars(T1, C1),
-                          C1 == "' op' []"
+                          C1 == "' op'[]"
                        ),
                        op(0, fx, ' op')
                       ).
@@ -595,7 +595,7 @@ test_142_143_144_221_258 :-
                           C1 == "[1]",
                           read_from_chars("-[1].", T2),
                           writeq_term_to_chars(T2, C2),
-                          C2 == "- [1]",
+                          C2 == "-[1]",
                           read_from_chars("X = 1.e.", T3),
                           writeq_term_to_chars(T3, C3),
                           C3 == "A=[1|e]",
@@ -934,7 +934,7 @@ test_274_275 :-
     setup_call_cleanup(op(20,fx,--),
                        (  read_from_chars("--(a).", T0),
                           writeq_term_to_chars(T0, C0),
-                          C0 == "-- a",
+                          C0 == "--a",
                           op(0,fx,--),
                           read_from_chars("--(a).", T1),
                           writeq_term_to_chars(T1, C1),
index af22252abcbe0a7906190c6b8cc916fca9442f93..f1735e78ad181e950866ee6f1c878676145a0da0 100644 (file)
@@ -54,10 +54,10 @@ fn handle_residual_goal() {
         true.\n   \
         true.\n   \
         false.\n   \
-        X = - X.\n   \
-        dif:dif(- X,X).\n   \
+        X = -X.\n   \
+        dif:dif(-X,X).\n   \
         false.\n   \
-        Vars = [X], dif:dif(- X,X).\n   \
+        Vars = [X], dif:dif(-X,X).\n   \
         true.\n   \
         true.\n   \
         true.\n\