Support backslash in string.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 18 Dec 2016 14:39:12 +0000 (15:39 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 18 Dec 2016 14:39:12 +0000 (15:39 +0100)
* reader.c (read_string): Handle '\\'.
* tests/read.test: Add it.

reader.c
tests/read.test

index 5fb081cf4ca2abb22704c61c097cbf5e1b96554b..c54404ce4d2cb03a4e4e3f3665c86b533d8a553e 100644 (file)
--- 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);
index 5c9305a15f9f7c879624259ef97c83e8ec3fe958..a4be746fa3f50d44fd85172404665531b9c014c9 100755 (executable)
@@ -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)