~ 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