>From bb937e5e6f92a33804967700dfd0633537a504c6 Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Fri, 15 Nov 2013 14:03:48 +1300 Subject: [PATCH] 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). --- expand.scm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/expand.scm b/expand.scm index 5838bcf..5025bc9 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)) -- 1.7.10.4