~ chicken-core (chicken-5) fa6bd93d552c2665c46203dc1cfabe70d4baf528


commit fa6bd93d552c2665c46203dc1cfabe70d4baf528
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Jun 11 14:04:35 2010 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Fri Jun 11 14:04:35 2010 +0200

    list-termination read errors give starting line

diff --git a/chicken-status.scm b/chicken-status.scm
index 89e2f293..35ac16d8 100644
--- a/chicken-status.scm
+++ b/chicken-status.scm
@@ -128,7 +128,7 @@ EOF
 		     (print "host at " (repo-path) ":\n")
 		     (status)
 		     (fluid-let ((*host-extensions* #f))
-		       (print "target at " (repo-path) ":\n")
+		       (print "\ntarget at " (repo-path) ":\n")
 		       (status)))
 		    (else (status))))
 	    (let ((arg (car args)))
diff --git a/library.scm b/library.scm
index 87d86abd..593b4096 100644
--- a/library.scm
+++ b/library.scm
@@ -2227,22 +2227,33 @@ EOF
 		    
 	  (define (r-list start end)
 	    (if (eq? (##sys#read-char-0 port) start)
-		(let ([first #f]
-		      [ln0 #f]
-		      [outer-container container] )
+		(let ((first #f)
+		      (ln0 #f)
+		      (outer-container container) )
+		  (define (starting-line msg)
+		    (if (and ln0 ##sys#read-error-with-line-number)
+			(string-append 
+			 msg ", starting in line "
+			 (##sys#number->string ln0))
+			msg))
 		  (##sys#call-with-current-continuation
 		   (lambda (return)
 		     (set! container
 		       (lambda (c)
 			 (if (eq? c end)
 			     (return #f)
-			     (##sys#read-error port "list-terminator mismatch" c end) ) ) )
+			     (##sys#read-error
+			      port
+			      (starting-line "list-terminator mismatch")
+			      c end) ) ) )
 		     (let loop ([last '()])
 		       (r-spaces)
 		       (unless first (set! ln0 (##sys#port-line port)))
 		       (let ([c (##sys#peek-char-0 port)])
 			 (cond ((##core#inline "C_eofp" c)
-				(##sys#read-error port "unterminated list") )
+				(##sys#read-error 
+				 port
+				 (starting-line "unterminated list") ) )
 			       ((eq? c end)
 				(##sys#read-char-0 port) )
 			       ((eq? c #\.)
@@ -2259,7 +2270,10 @@ EOF
 					 (##sys#setslot last 1 (readrec))
 					 (r-spaces)
 					 (unless (eq? (##sys#read-char-0 port) end)
-					   (##sys#read-error port "missing list terminator" end) ) ]
+					   (##sys#read-error
+					    port
+					    (starting-line "missing list terminator")
+					    end) ) ]
 					[else
 					 (let* ((tok (##sys#string-append "." (r-token)))
 						(n (and (char-numeric? c2) 
@@ -2283,7 +2297,7 @@ EOF
 		(##sys#read-error port "missing token" start) ) )
 	  
 	  (define (r-vector)
-	    (let ([lst (r-list #\( #\))])
+	    (let ((lst (r-list #\( #\))))
 	      (if (list? lst)
 		  (##sys#list->vector lst)
 		  (##sys#read-error port "invalid vector syntax" lst) ) ) )
Trap