diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 93f5d832c..8af9672ff 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/libguile/read.c b/libguile/read.c index 4439b2052..645489995 100644 --- a/libguile/read.c +++ b/libguile/read.c @@ -205,6 +205,9 @@ strncasecmp (const char *s1, const char *s2, size_t len2) #endif +/* 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. */ @@ -271,6 +274,21 @@ flush_ws (SCM port, const char *eoferr) } 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': diff --git a/test-suite/ChangeLog b/test-suite/ChangeLog index 91de647e9..bd546f985 100644 --- a/test-suite/ChangeLog +++ b/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-23 Ludovic Courtès * tests/reader.test (read-options)[positions on quote]: New diff --git a/test-suite/tests/reader.test b/test-suite/tests/reader.test index 3d37c1f7d..7f24aa695 100644 --- a/test-suite/tests/reader.test +++ b/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")