core: Support \xNN in reader. Fixes tcc-boot running on Mes. fix
authorJan Nieuwenhuizen <janneke@gnu.org>
Thu, 13 Dec 2018 17:19:19 +0000 (18:19 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Thu, 13 Dec 2018 17:19:43 +0000 (18:19 +0100)
* src/reader.c (reader_read_string): Support \xNN.  Fixes Guix
bootstrap chain; i.e., compilation of gcc-2.95.3 using tcc-boot.
* tests/base.test ("reader: \\x08"): Test it.
* scaffold/tests/17-compare-char.c: Likewise, for mescc.
* build-aux/check-mescc.sh (tests): Run it.

build-aux/check-mescc.sh
scaffold/tests/17-compare-char.c [new file with mode: 0644]
src/reader.c
tests/base.test

index 664c5cedd48124635bc03af4dcf30954d80b6f09..ab0c2f465c2d08dcd6b9bdbd7aa2263fdbb5a6d2 100755 (executable)
@@ -70,6 +70,7 @@ t
 14-if-goto
 15-if-!f
 16-if-t
+17-compare-char
 17-compare-ge
 17-compare-gt
 17-compare-le
diff --git a/scaffold/tests/17-compare-char.c b/scaffold/tests/17-compare-char.c
new file mode 100644 (file)
index 0000000..2441bfe
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+int
+main ()
+{
+  if ('0' != 48)
+    return 1;
+  if ('\a' != 7)
+    return 2;
+  if ('\b' != 8)
+    return 3;
+  return 0;
+}
index b85c35bc18d2052273a7a9c2a1e65e276f157bb2..0a3c985e71aa34ac6b089fee041b073bcce6f6ed 100644 (file)
@@ -451,6 +451,11 @@ reader_read_string ()
             // Nyacc bug
             // lst = cons (MAKE_CHAR ('\e'), lst);
             lst = cons (MAKE_CHAR (27), lst);
+          else if (c == 'x')
+            {
+              SCM x = reader_read_hex ();
+              lst = cons (MAKE_CHAR (VALUE (x)), lst);
+            }
         }
       else
         lst = cons (MAKE_CHAR (c), lst);
index 61fca2ef5413aabfdda21f7c41317b577e5631da..54cad53c20bccf42745f40946ddeab356a3d47a8 100755 (executable)
@@ -115,6 +115,18 @@ exec ${MES-src/mes} --no-auto-compile -L ${0%/*} -L module -C module -e '(tests
                (char? (integer->char -1))))
  (else))
 
+(pass-if-eq "reader: \\n"
+ #\newline
+ (car (string->list "\n")))
+
+(pass-if-eq "reader: \\a"
+ #\alarm
+ (car (string->list "\a")))
+
+(pass-if-eq "reader: \\x08"
+ #\backspace
+ (car (string->list "\x08")))
+
 (pass-if-equal "setenv, getenv"
     "bar"
   (begin