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)

Reply via email to