Author: yamakenz
Date: Fri Aug 17 18:12:50 2007
New Revision: 4861
Modified:
sigscheme-trunk/NEWS
sigscheme-trunk/src/read.c
sigscheme-trunk/test/test-formal-syntax.scm
Log:
* src/read.c
- (read_quoted): Fix reading unterminated quote as (quote #<eof>)
* test/test-formal-syntax.scm
- Add tests for unterminated quotes
* NEWS
- Update
Modified: sigscheme-trunk/NEWS
==============================================================================
--- sigscheme-trunk/NEWS (original)
+++ sigscheme-trunk/NEWS Fri Aug 17 18:12:50 2007
@@ -90,6 +90,8 @@
- [R5RS] Fix invalid assertion on modifying optional arguments to a dotted or
circular list (see test-misc.scm). This bug only appeared on --enable-debug
+ - Fix reading unterminated quote as (quote #<eof>)
+
* Others
- New document multibyte.txt about multibyte character processing has been
Modified: sigscheme-trunk/src/read.c
==============================================================================
--- sigscheme-trunk/src/read.c (original)
+++ sigscheme-trunk/src/read.c Fri Aug 17 18:12:50 2007
@@ -1034,7 +1034,14 @@
static ScmObj
read_quoted(ScmObj port, ScmObj quoter)
{
- return SCM_LIST_2(quoter, read_sexpression(port));
+ ScmObj obj;
+ DECLARE_INTERNAL_FUNCTION("read");
+
+ obj = read_sexpression(port);
+ if (EOFP(obj))
+ ERR("EOF in ~a", quoter);
+
+ return SCM_LIST_2(quoter, obj);
}
/*===========================================================================
Modified: sigscheme-trunk/test/test-formal-syntax.scm
==============================================================================
--- sigscheme-trunk/test/test-formal-syntax.scm (original)
+++ sigscheme-trunk/test/test-formal-syntax.scm Fri Aug 17 18:12:50 2007
@@ -384,4 +384,11 @@
(assert-equal? (tn) #t (if #t #t #t))
(assert-error (tn) (lambda () (if #t #t #t . #t)))
+(tn "EOF immediately after quoter")
+;; (quote #<eof>) is invalid
+(assert-error (tn) (lambda () (string-read "'")))
+(assert-error (tn) (lambda () (string-read "`")))
+(assert-error (tn) (lambda () (string-read ",")))
+(assert-error (tn) (lambda () (string-read ",@")))
+
(total-report)