[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