Summary
case-lambda is unhygienic
Metadata
- Id: 29fecd2db7f50588b2f43db9c6bde7ebc55d2430
- Trac id: 805
- Type: defect
- Reporter: syn
- Owner: ckeen
- Cc:
- Status: closed
- Component: core libraries
- Estimated difficulty:
- Resolution: fixed
- Priority: minor
- Milestone: 4.9.0
- Version: 4.7.x
- Changetime: 2012-09-24 21:47:48 UTC
- Created: 2012-03-25 01:53:43 UTC
- Keywords:
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