~ 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