~ 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