~ chicken-core (chicken-5) 4706afb42ea681d39f2ded7a25033776bcc9c039
commit 4706afb42ea681d39f2ded7a25033776bcc9c039
Author: Moritz Heidkamp <moritz@twoticketsplease.de>
AuthorDate: Sun Mar 25 14:24:07 2012 +0200
Commit: Christian Kellermann <ckeen@pestilenz.org>
CommitDate: Sun Mar 25 14:41:08 2012 +0200
Fix hygiene issues in `case-lambda'
This adresses bug #805
Signed-off-by: Christian Kellermann <ckeen@pestilenz.org>
diff --git a/chicken-syntax.scm b/chicken-syntax.scm
index 08bede25..b634d1f4 100644
--- a/chicken-syntax.scm
+++ b/chicken-syntax.scm
@@ -764,7 +764,8 @@
`((>= . ,(##sys#primitive-alias '>=))
(car . ,(##sys#primitive-alias 'car))
(cdr . ,(##sys#primitive-alias 'cdr))
- (eq? . ,(##sys#primitive-alias 'eq?)))
+ (eq? . ,(##sys#primitive-alias 'eq?))
+ (length . ,(##sys#primitive-alias 'length)))
(##sys#er-transformer
(lambda (form r c)
(##sys#check-syntax 'case-lambda form '(_ . _))
@@ -785,11 +786,12 @@
(%>= (r '>=))
(%eq? (r 'eq?))
(%car (r 'car))
- (%cdr (r 'cdr)))
+ (%cdr (r 'cdr))
+ (%length (r 'length)))
`(##core#lambda
,(append minvars rvar)
(##core#let
- ((,lvar (length ,rvar)))
+ ((,lvar (,%length ,rvar)))
,(fold-right
(lambda (c body)
(##sys#decompose-lambda-list
@@ -820,7 +822,7 @@
bindings
`(##core#let ,(map list vars1 minvars) ,bindings) ) ) )
,body) ) ) )
- '(##core#check (##sys#error (##core#immutable '"no matching clause in call to 'case-lambda' form")))
+ '(##core#check (##sys#error (##core#immutable (##core#quote "no matching clause in call to 'case-lambda' form"))))
(cdr form))))))))
Trap