~ chicken-core (chicken-5) f5a6745b2f301bb03db92c8988af7acf749fcab5


commit f5a6745b2f301bb03db92c8988af7acf749fcab5
Author:     felix <bunny351@gmail.com>
AuthorDate: Thu May 27 12:45:41 2010 +0200
Commit:     felix <bunny351@gmail.com>
CommitDate: Thu May 27 12:45:41 2010 +0200

    getter-with-setter copies lambda-info from getter

diff --git a/library.scm b/library.scm
index f4fdadde..2d35cad3 100644
--- a/library.scm
+++ b/library.scm
@@ -4463,10 +4463,11 @@ EOF
 
 ;;; Function debug info:
 
+(define (##sys#lambda-info? x)
+  (and (not (##sys#immediate? x)) (##core#inline "C_lambdainfop" x)))
+
 (define (##sys#lambda-info proc)
-  (##sys#lambda-decoration 
-   proc 
-   (lambda (x) (and (not (##sys#immediate? x)) (##core#inline "C_lambdainfop" x))) ) )
+  (##sys#lambda-decoration proc ##sys#lambda-info?))
 
 (define (##sys#lambda-info->string info)
   (let* ((sz (##sys#size info))
@@ -4517,29 +4518,38 @@ EOF
 (define setter ##sys#setter)
 
 (define (getter-with-setter get set)
-  (##sys#decorate-lambda
-   get
-   setter?
-   (lambda (proc i)
-     (##sys#setslot proc i (cons setter-tag set))
-     proc) ) )
-
-(define car (getter-with-setter car set-car!))
-(define cdr (getter-with-setter cdr set-cdr!))
-(define caar (getter-with-setter caar (lambda (x y) (set-car! (car x) y))))
-(define cadr (getter-with-setter cadr (lambda (x y) (set-car! (cdr x) y))))
-(define cdar (getter-with-setter cdar (lambda (x y) (set-cdr! (car x) y))))
-(define cddr (getter-with-setter cddr (lambda (x y) (set-cdr! (cdr x) y))))
-(define caaar (getter-with-setter caaar (lambda (x y) (set-car! (caar x) y))))
-(define caadr (getter-with-setter caadr (lambda (x y) (set-car! (cadr x) y))))
-(define cadar (getter-with-setter cadar (lambda (x y) (set-car! (cdar x) y))))
-(define caddr (getter-with-setter caddr (lambda (x y) (set-car! (cddr x) y))))
-(define cdaar (getter-with-setter cdaar (lambda (x y) (set-cdr! (caar x) y))))
-(define cdadr (getter-with-setter cdadr (lambda (x y) (set-cdr! (cadr x) y))))
-(define cddar (getter-with-setter cddar (lambda (x y) (set-cdr! (cdar x) y))))
-(define cdddr (getter-with-setter cdddr (lambda (x y) (set-cdr! (cddr x) y))))
-(define string-ref (getter-with-setter string-ref string-set!))
-(define vector-ref (getter-with-setter vector-ref vector-set!))
+  (let ((getdec (##sys#lambda-info get))
+	(p1 (##sys#decorate-lambda
+	     get
+	     setter?
+	     (lambda (proc i)
+	       (##sys#setslot proc i (cons setter-tag set))
+	       proc) )))
+    (if getdec
+	(##sys#decorate-lambda
+	 p1
+	 ##sys#lambda-info?
+	 (lambda (p i)
+	   (##sys#setslot p i getdec)
+	   p))
+	p1)))
+
+(set! car (getter-with-setter car set-car!))
+(set! cdr (getter-with-setter cdr set-cdr!))
+(set! caar (getter-with-setter caar (lambda (x y) (set-car! (car x) y))))
+(set! cadr (getter-with-setter cadr (lambda (x y) (set-car! (cdr x) y))))
+(set! cdar (getter-with-setter cdar (lambda (x y) (set-cdr! (car x) y))))
+(set! cddr (getter-with-setter cddr (lambda (x y) (set-cdr! (cdr x) y))))
+(set! caaar (getter-with-setter caaar (lambda (x y) (set-car! (caar x) y))))
+(set! caadr (getter-with-setter caadr (lambda (x y) (set-car! (cadr x) y))))
+(set! cadar (getter-with-setter cadar (lambda (x y) (set-car! (cdar x) y))))
+(set! caddr (getter-with-setter caddr (lambda (x y) (set-car! (cddr x) y))))
+(set! cdaar (getter-with-setter cdaar (lambda (x y) (set-cdr! (caar x) y))))
+(set! cdadr (getter-with-setter cdadr (lambda (x y) (set-cdr! (cadr x) y))))
+(set! cddar (getter-with-setter cddar (lambda (x y) (set-cdr! (cdar x) y))))
+(set! cdddr (getter-with-setter cdddr (lambda (x y) (set-cdr! (cddr x) y))))
+(set! string-ref (getter-with-setter string-ref string-set!))
+(set! vector-ref (getter-with-setter vector-ref vector-set!))
 
 
 ;;; Property lists
Trap