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.
This commit is contained in:
Jan Nieuwenhuizen 2018-12-13 18:19:19 +01:00
parent 3c9274ce2d
commit a155a0a9a2
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
4 changed files with 49 additions and 0 deletions

View File

@ -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

View File

@ -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;
}

View 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);

View File

@ -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