[COMMITTED] algol68: use more conventional still conformant string breaks

Jose E. Marchesi jemarch@gnu.org
Wed Apr 23 23:40:04 GMT 2025


---
 gcc/algol68/a68-low-strings.cc                   | 16 ++++++++--------
 gcc/algol68/a68-parser-scanner.cc                |  8 ++++----
 gcc/algol68/ga68.texi                            |  8 ++++----
 gcc/testsuite/algol68/compile/char-break-1.a68   |  8 ++++----
 .../algol68/compile/error-string-break-7.a68     |  2 ++
 gcc/testsuite/algol68/compile/snobol.a68         | 12 ++++++------
 gcc/testsuite/algol68/execute/string-break-1.a68 |  9 +++++----
 7 files changed, 33 insertions(+), 30 deletions(-)
 create mode 100644 gcc/testsuite/algol68/compile/error-string-break-7.a68

diff --git a/gcc/algol68/a68-low-strings.cc b/gcc/algol68/a68-low-strings.cc
index 513d9809002..2754b83e9ce 100644
--- a/gcc/algol68/a68-low-strings.cc
+++ b/gcc/algol68/a68-low-strings.cc
@@ -289,10 +289,10 @@ a68_string_process_breaks (const char *str)
 	  switch (p[1])
 	    {
 	    case '\'':
-	    case '/':
-	    case '%':
-	    case '+':
-	    case ',':
+	    case 'n':
+	    case 'f':
+	    case 'r':
+	    case 't':
 	      len += 1;
 	      p += 2;
 	      break;
@@ -340,10 +340,10 @@ a68_string_process_breaks (const char *str)
 	  switch (p[1])
 	    {
 	    case '\'': res[offset] = '\''; p += 2; offset += 1; break;
-	    case '/': res[offset] = '\n'; p += 2;  offset += 1; break;
-	    case ',': res[offset] = '\t'; p += 2;  offset += 1; break;
-	    case '+': res[offset] = '\r'; p += 2;  offset += 1; break;
-	    case '%': res[offset] = '\f'; p += 2;  offset += 1; break;
+	    case 'n': res[offset] = '\n'; p += 2;  offset += 1; break;
+	    case 't': res[offset] = '\t'; p += 2;  offset += 1; break;
+	    case 'r': res[offset] = '\r'; p += 2;  offset += 1; break;
+	    case 'f': res[offset] = '\f'; p += 2;  offset += 1; break;
 	    case '(':
 	      {
 		p += 2;
diff --git a/gcc/algol68/a68-parser-scanner.cc b/gcc/algol68/a68-parser-scanner.cc
index f9bf3e556a0..4f7a2ffc198 100644
--- a/gcc/algol68/a68-parser-scanner.cc
+++ b/gcc/algol68/a68-parser-scanner.cc
@@ -1592,10 +1592,10 @@ get_next_token (bool in_format,
 		  switch (c)
 		    {
 		    case APOSTROPHE_CHAR:
-		    case '/':
-		    case '%':
-		    case '+':
-		    case ',':
+		    case 'n':
+		    case 'f':
+		    case 'r':
+		    case 't':
 		      (sym++)[0] = c;
 		      break;
 		    case '(':
diff --git a/gcc/algol68/ga68.texi b/gcc/algol68/ga68.texi
index b5bdf0d9435..05566472649 100644
--- a/gcc/algol68/ga68.texi
+++ b/gcc/algol68/ga68.texi
@@ -1534,13 +1534,13 @@ The following string breaks are recognized by this compiler:
 @table @code
 @item ''
 Apostrophe character @code{'}.
-@item '/
+@item 'n
 Newline character.
-@item '%
+@item 'f
 Form feed character.
-@item '+
+@item 'r
 Carriage return (no line feed).
-@item ',
+@item 't
 Tab.
 @item '(list of character codes separated by commas)
 The indicated characters, where each code has the form @code{uhhhh} or
diff --git a/gcc/testsuite/algol68/compile/char-break-1.a68 b/gcc/testsuite/algol68/compile/char-break-1.a68
index e8d7faee436..00037a0103b 100644
--- a/gcc/testsuite/algol68/compile/char-break-1.a68
+++ b/gcc/testsuite/algol68/compile/char-break-1.a68
@@ -1,10 +1,10 @@
 # Make sure char denotations with string breaks work.  #
 begin prio % = 9;
       op % = (char a) char: a;
-      assert (ABS %"'/" = 10);
-      assert (ABS %"'%" = 12);
-      assert (ABS %"'," = 9);
-      assert (ABS %"'+" = 13);
+      assert (ABS %"'n" = 10);
+      assert (ABS %"'f" = 12);
+      assert (ABS %"'t" = 9);
+      assert (ABS %"'r" = 13);
       assert (%"'(  u0061)" = "a");
       assert (%"'(U00000061  )" = "a");
       assert (%"'(u1234)" = invalid_char)
diff --git a/gcc/testsuite/algol68/compile/error-string-break-7.a68 b/gcc/testsuite/algol68/compile/error-string-break-7.a68
new file mode 100644
index 00000000000..58545e01ce1
--- /dev/null
+++ b/gcc/testsuite/algol68/compile/error-string-break-7.a68
@@ -0,0 +1,2 @@
+begin puts ("'") # { dg-error "" }  #
+end
diff --git a/gcc/testsuite/algol68/compile/snobol.a68 b/gcc/testsuite/algol68/compile/snobol.a68
index b3ad9142ae0..1a12f540670 100644
--- a/gcc/testsuite/algol68/compile/snobol.a68
+++ b/gcc/testsuite/algol68/compile/snobol.a68
@@ -91,7 +91,7 @@ BEGIN PROC itoa = (INT i) STRING:
       REF ITEM prog entry := NIL;
 
       PROC error = (STRING mess) VOID:
-         (puts ("error: " + mess + "'/"); stop);
+         (puts ("error: " + mess + "'n"); stop);
 
       # TRANSLATION PHASE #
 
@@ -128,7 +128,7 @@ BEGIN PROC itoa = (INT i) STRING:
                         c := card[1];
                         IF c /= "." AND c /= "+" AND c /= "-" AND c /= "*"
                         THEN stn := stn + 1 FI;
-                        IF listing THEN puts (itoa (stn) + "    " + card + "'/") FI;
+                        IF listing THEN puts (itoa (stn) + "    " + card + "'n") FI;
                         IF c = "-"
                         THEN IF card[2:5] = "LIST"
                              THEN listing := TRUE
@@ -466,7 +466,7 @@ BEGIN PROC itoa = (INT i) STRING:
                FI;
 
             PROC usage = VOID:
-            BEGIN puts ("Usage: snobol [-l] FILE'/");
+            BEGIN puts ("Usage: snobol [-l] FILE'n");
                   stop
             END;
 
@@ -670,10 +670,10 @@ BEGIN PROC itoa = (INT i) STRING:
                     ref OF s := object ptr;
                     IF val OF s = "OUTPUT"
                     THEN IF object ptr IS NIL
-                         THEN puts ("'/")
+                         THEN puts ("'n")
                          ELSE CASE object ptr
-                              IN (REF STRINGITEM r): puts ((val OF r) + "'/"),
-                                 (INT i): puts (itoa (i) + "'/"),
+                              IN (REF STRINGITEM r): puts ((val OF r) + "'n"),
+                                 (INT i): puts (itoa (i) + "'n"),
                                  (PATTERN): (error ("ATTEMPT TO OUTPUT PATTERN"); SKIP)
                               ESAC
                          FI
diff --git a/gcc/testsuite/algol68/execute/string-break-1.a68 b/gcc/testsuite/algol68/execute/string-break-1.a68
index 7ab5bdb3c5f..e99cfe9ebad 100644
--- a/gcc/testsuite/algol68/execute/string-break-1.a68
+++ b/gcc/testsuite/algol68/execute/string-break-1.a68
@@ -1,7 +1,8 @@
-begin assert (UPB "foo'/bar" = 7);
-      assert (UPB "foo',bar" = 7);
-      assert (UPB "foo'+bar" = 7);
-      assert (UPB "foo''bar" = 7);
+begin assert (UPB "foo'nbar" = 7 AND "foo'nbar"[4] = REPR 10);
+      assert (UPB "foo'tbar" = 7 AND "foo'tbar"[4] = REPR 9);
+      assert (UPB "foo'rbar" = 7 AND "foo'rbar"[4] = REPR 13);
+      assert (UPB "foo'fbar" = 7 AND "foo'fbar"[4] = REPR 12);
+      assert (UPB "foo''bar" = 7 AND "foo''bar"[4] = REPR 39);
       assert ("'(u0048,u0065,U0000006c,u006c,U0000006f)" = "Hello");
       assert ("'( u0048,   u0065,   U0000006c,u006c,     U0000006f  )" = "Hello")
 end
-- 
2.30.2



More information about the Algol68 mailing list