~ chicken-core (chicken-5) b6add5383f325c864dda2fcee3046eda6d94cb2b
commit b6add5383f325c864dda2fcee3046eda6d94cb2b Author: Peter Bex <peter.bex@xs4all.nl> AuthorDate: Fri Nov 15 20:04:39 2013 +0100 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sat Nov 16 08:39:11 2013 +1300 Warn on cond clauses following constant expressions like for `else'. Thanks to Joerg Wittenberger for suggestion and initial patch. Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/expand.scm b/expand.scm index 5025bc99..a80eeff3 100644 --- a/expand.scm +++ b/expand.scm @@ -1144,12 +1144,23 @@ (##sys#check-syntax 'cond clause '#(_ 1)) (cond (else? (##sys#warn - "clause following `else' clause in `cond'" + (sprintf "clause following `~S' clause in `cond'" else?) (##sys#strip-syntax clause)) - (expand rclauses #t) + (expand rclauses else?) '(##core#begin)) - ((c %else (car clause)) - (expand rclauses #t) + ((or (c %else (car clause)) + (eq? #t (car clause)) + ;; Like "constant?" from support.scm + (number? (car clause)) + (char? (car clause)) + (string? (car clause)) + (eof-object? (car clause)) + (blob? (car clause)) + (vector? (car clause)) + (##sys#srfi-4-vector? (car clause)) + (and (pair? (car clause)) + (c (r 'quote) (caar clause)))) + (expand rclauses (strip-syntax (car clause))) `(##core#begin ,@(cdr clause))) ((null? (cdr clause)) `(,%or ,(car clause) ,(expand rclauses #f)))Trap