>From 700fa448bd71de857ab32974693dce076d8737e3 Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Mon, 27 May 2013 14:11:02 +1200 Subject: [PATCH] verify syntax in => cond clauses This corrects cond's behavior given clauses of the form `(test =>)` or `(test => foo bar)`. Signed-off-by: Peter Bex --- expand.scm | 5 +++-- tests/syntax-tests.scm | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/expand.scm b/expand.scm index 3688fa2..ea53d6b 100644 --- a/expand.scm +++ b/expand.scm @@ -1144,13 +1144,14 @@ '(##core#begin)) ((null? (cdr clause)) `(,%or ,(car clause) ,(expand rclauses #f))) - ((c %=> (cadr clause)) + ((and (fx= (length clause) 3) + (c %=> (cadr clause))) (let ((tmp (r 'tmp))) `(##core#let ((,tmp ,(car clause))) (##core#if ,tmp (,(caddr clause) ,tmp) ,(expand rclauses #f) ) ) ) ) - ((and (list? clause) (fx= (length clause) 4) + ((and (fx= (length clause) 4) (c %=> (caddr clause))) (let ((tmp (r 'tmp))) `(##sys#call-with-values diff --git a/tests/syntax-tests.scm b/tests/syntax-tests.scm index 6da0277..89cfd46 100644 --- a/tests/syntax-tests.scm +++ b/tests/syntax-tests.scm @@ -191,6 +191,14 @@ (cond (#t => 'ok))) ) +(t 1 (let ((=> 1)) + (cond (#f 'false) + (#t =>)))) + +(t 3 (let ((=> 1)) + (cond (#f 'false) + (#t => 2 3)))) + (t '(3 4) (let ((foo 3)) (let-syntax ((bar (syntax-rules () ((_ x) (list foo x))))) -- 1.8.2.3