~ chicken-core (chicken-5) 1255242c962147a842e618da405a6c2597ce6ad8
commit 1255242c962147a842e618da405a6c2597ce6ad8
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Mon May 27 14:11:02 2013 +1200
Commit: Christian Kellermann <ckeen@pestilenz.org>
CommitDate: Sun Jun 16 21:04:29 2013 +0200
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 <peter.bex@xs4all.nl>
Signed-off-by: Christian Kellermann <ckeen@pestilenz.org>
diff --git a/expand.scm b/expand.scm
index 3688fa25..ea53d6b3 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 6da0277a..89cfd469 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)))))
Trap