From 6b4bf34ff2a540ba0eb1149f2f764d481edbd2ff Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sun, 18 Dec 2016 15:39:12 +0100 Subject: [PATCH] Support backslash in string. * reader.c (read_string): Handle '\\'. * tests/read.test: Add it. --- reader.c | 3 ++- tests/read.test | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/reader.c b/reader.c index 5fb081cf..c54404ce 100644 --- a/reader.c +++ b/reader.c @@ -169,7 +169,8 @@ read_string () int c = getchar (); while (true) { if (c == '"') break; - if (c == '\\' && peekchar () == '"') p = append_char (p, getchar ()); + if (c == '\\' && peekchar () == '\\') p = append_char (p, getchar ()); + else if (c == '\\' && peekchar () == '"') p = append_char (p, getchar ()); else if (c == '\\' && peekchar () == 'n') {getchar (); p = append_char (p, '\n');} else if (c == EOF) assert (!"EOF in string"); else p = append_char (p, c); diff --git a/tests/read.test b/tests/read.test index 5c9305a1..a4be746f 100755 --- a/tests/read.test +++ b/tests/read.test @@ -23,6 +23,17 @@ cons (display #x16) (newline) (display #\A) (newline) (display #\newline) (newline) +#\alarm +#\backspace +#\tab +#\newline +#\vtab +#\page +#\return +#\space +(display "\"") +(display "\\") +(display "\\\"\"\\") (display 'foo)(newline) (display '(foo))(newline) (display '('foo))(newline)