[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Improved (and faster) reader
From: |
Ludovic Courtès |
Subject: |
Re: Improved (and faster) reader |
Date: |
Mon, 03 Sep 2007 18:59:58 +0200 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux) |
Hi,
I just came across another reader regression (corner case with SCSH
comments). I applied the attached patch.
Thanks,
Ludovic.
--- orig/libguile/ChangeLog
+++ mod/libguile/ChangeLog
@@ -1,5 +1,9 @@
2007-09-03 Ludovic Courtès <address@hidden>
+ * read.c (flush_ws): Handle SCSH block comments.
+
+2007-09-03 Ludovic Courtès <address@hidden>
+
Fix alignment issues which showed up at least on SPARC.
* socket.c (scm_t_max_sockaddr, scm_t_getsockopt_result): New.
--- orig/libguile/read.c
+++ mod/libguile/read.c
@@ -179,6 +179,9 @@
(((_chr) <= UCHAR_MAX) ? tolower (_chr) : (_chr))
+/* Read an SCSH block comment. */
+static inline SCM scm_read_scsh_block_comment (int chr, SCM port);
+
/* Helper function similar to `scm_read_token ()'. Read from PORT until a
whitespace is read. Return zero if the whole token could fit in BUF,
non-zero otherwise. */
@@ -245,6 +248,21 @@
}
break;
+ case '#':
+ switch (c = scm_getc (port))
+ {
+ case EOF:
+ eoferr = "read_sharp";
+ goto goteof;
+ case '!':
+ scm_read_scsh_block_comment (c, port);
+ break;
+ default:
+ scm_ungetc (c, port);
+ return '#';
+ }
+ break;
+
case SCM_LINE_INCREMENTORS:
case SCM_SINGLE_SPACES:
case '\t':
--- orig/test-suite/ChangeLog
+++ mod/test-suite/ChangeLog
@@ -1,3 +1,8 @@
+2007-09-03 Ludovic Courtès <address@hidden>
+
+ * tests/reader.test (reading)[block comment finishing sexp]: New
+ test.
+
2007-08-26 Han-Wen Nienhuys <address@hidden>
* tests/ports.test ("port-for-each"): remove unresolved for
--- orig/test-suite/tests/reader.test
+++ mod/test-suite/tests/reader.test
@@ -77,6 +77,10 @@
(equal? '(+ 1 2 3)
(read-string "(+ 1 #! this is a\ncomment !# 2 3)")))
+ (pass-if "block comment finishing s-exp"
+ (equal? '(+ 2)
+ (read-string "(+ 2 #! a comment\n!#\n) ")))
+
(pass-if "unprintable symbol"
;; The reader tolerates unprintable characters for symbols.
(equal? (string->symbol "\001\002\003")
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: Improved (and faster) reader,
Ludovic Courtès <=