--- orig/libguile/ChangeLog +++ mod/libguile/ChangeLog @@ -1,5 +1,9 @@ 2007-09-03 Ludovic Courtès + * read.c (flush_ws): Handle SCSH block comments. + +2007-09-03 Ludovic Courtès + 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 + + * tests/reader.test (reading)[block comment finishing sexp]: New + test. + 2007-08-26 Han-Wen Nienhuys * 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")