Summary

case-lambda is unhygienic

Metadata

Description

 
 {{{
 #;1> (module foo (foo) (import (only scheme quote) (prefix chicken c/) (prefix scheme s/)) (s/define foo (c/case-lambda ((a) a) ((a b) b))))
 
 Warning: reference to possibly unbound identifier `length' in:
 Warning:    foo
 
 Error: module unresolved: foo

I tried the following fix but it doesn't seem to change a thing:

 diff --git a/chicken-syntax.scm b/chicken-syntax.scm
 index 08bede2..a6c70d4 100644
 --- a/chicken-syntax.scm
 +++ b/chicken-syntax.scm
 @@ -785,11 +785,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
 

Does anyone know what's going on?

Changes and comments

[2012-03-25 10:14:45 UTC] ckeen changed status from new to accepted

[2012-03-25 10:14:45 UTC] ckeen set owner to ckeen

[2012-03-25 10:14:45 UTC] ckeen wrote:

Does the following patch solve the issue for you?

 diff --git a/chicken-syntax.scm b/chicken-syntax.scm
 index 08bede2..c92e0f3 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

[2012-03-25 13:03:37 UTC] syn wrote:

Ah, so that's what I was overlooking. Works brillantly now. Can you create a format-patch version of this fix for me to sign it off? Thanks!

[2012-03-25 15:48:19 UTC] syn changed status from accepted to closed

[2012-03-25 15:48:19 UTC] syn set resolution to fixed

[2012-09-24 21:47:48 UTC] felix changed milestone from 4.8.0 to 4.9.0

[2012-09-24 21:47:48 UTC] felix wrote:

Milestone 4.8.0 deleted