>From 094125c64cc088544311fd850e170107ef82625c Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Fri, 15 Nov 2013 20:04:39 +0100 Subject: [PATCH] Warn on cond clauses following constant expressions like for `else'. Thanks to Joerg Wittenberger for suggestion and initial patch. --- expand.scm | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/expand.scm b/expand.scm index 5025bc9..a80eeff 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))) -- 1.7.10.4