~ chicken-core (chicken-5) e98b6f61617c15dcb60d082ea3925f77a772d2fd


commit e98b6f61617c15dcb60d082ea3925f77a772d2fd
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Fri Nov 15 14:03:48 2013 +1300
Commit:     Peter Bex <peter.bex@xs4all.nl>
CommitDate: Fri Nov 15 19:53:59 2013 +0100

    Warn on all clauses after an else in cond and case forms
    
    Previously, warnings were issued for non-else clauses, but any else
    clauses after the first are also effectively ignored so this adds
    warnings for those as well (and at the same warn level; case had been
    using ##sys#notice while cond used ##sys#warn).
    
    Signed-off-by: Peter Bex <peter.bex@xs4all.nl>

diff --git a/expand.scm b/expand.scm
index 5838bcf4..5025bc99 100644
--- a/expand.scm
+++ b/expand.scm
@@ -1142,15 +1142,15 @@
 	    (let ((clause (car clauses))
 		  (rclauses (cdr clauses)) )
 	      (##sys#check-syntax 'cond clause '#(_ 1))
-	      (cond ((c %else (car clause))
-		     (expand rclauses #t)
-		     `(##core#begin ,@(cdr clause)))
-		    (else?
+	      (cond (else?
 		     (##sys#warn
-		      "non-`else' clause following `else' clause in `cond'"
+		      "clause following `else' clause in `cond'"
 		      (##sys#strip-syntax clause))
 		     (expand rclauses #t)
 		     '(##core#begin))
+		    ((c %else (car clause))
+		     (expand rclauses #t)
+		     `(##core#begin ,@(cdr clause)))
 		    ((null? (cdr clause)) 
 		     `(,%or ,(car clause) ,(expand rclauses #f)))
 		    ((and (fx= (length clause) 3)
@@ -1194,18 +1194,18 @@
 		  (let ((clause (car clauses))
 			(rclauses (cdr clauses)) )
 		    (##sys#check-syntax 'case clause '#(_ 1))
-		    (cond ((c %else (car clause))
+		    (cond (else?
+			   (##sys#warn
+			    "clause following `else' clause in `case'"
+			    (##sys#strip-syntax clause))
+			   (expand rclauses #t)
+			   '(##core#begin))
+			  ((c %else (car clause))
 			   (expand rclauses #t)
 			   (if (and (fx= (length clause) 3) ; (else => expr)
 				    (c %=> (cadr clause)))
 			       `(,(caddr clause) ,tmp)
 			       `(##core#begin ,@(cdr clause))))
-			  (else?
-			   (##sys#notice
-			    "non-`else' clause following `else' clause in `case'"
-			    (##sys#strip-syntax clause))
-			   (expand rclauses #t)
-			   '(##core#begin))
 			  (else
 			   `(##core#if (,%or ,@(##sys#map
 						(lambda (x) `(,%eqv? ,tmp ',x))
Trap