From a155a0a9a2d941b15c1b98e5cce787de40a8dacd Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 13 Dec 2018 18:19:19 +0100 Subject: [PATCH] core: Support \xNN in reader. Fixes tcc-boot running on Mes. * 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 | 1 + scaffold/tests/17-compare-char.c | 31 +++++++++++++++++++++++++++++++ src/reader.c | 5 +++++ tests/base.test | 12 ++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 scaffold/tests/17-compare-char.c diff --git a/build-aux/check-mescc.sh b/build-aux/check-mescc.sh index 664c5ced..ab0c2f46 100755 --- a/build-aux/check-mescc.sh +++ b/build-aux/check-mescc.sh @@ -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 index 00000000..2441bfef --- /dev/null +++ b/scaffold/tests/17-compare-char.c @@ -0,0 +1,31 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * 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 . + */ + +int +main () +{ + if ('0' != 48) + return 1; + if ('\a' != 7) + return 2; + if ('\b' != 8) + return 3; + return 0; +} diff --git a/src/reader.c b/src/reader.c index b85c35bc..0a3c985e 100644 --- a/src/reader.c +++ b/src/reader.c @@ -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); diff --git a/tests/base.test b/tests/base.test index 61fca2ef..54cad53c 100755 --- a/tests/base.test +++ b/tests/base.test @@ -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