Sorry,
I posted to early, the patch is incorrect. Attached a better one.
Am Donnerstag, den 07.08.2008, 17:08 +0200 schrieb Jörg F. Wittenberger:
> Hi all,
>
> here a small test case, which shows how parameter objects work in
> chicken:
>
> ---- %< ----
> #!/usr/bin/csi -i
>
> (require-extension srfi-18)
>
> (define p (make-parameter #f))
>
> (define ts (thread-start! (lambda () (thread-sleep! 3) (print "now
> " (p)))))
>
> (thread-sleep! 1)
>
> (p 42)
>
> (thread-join! ts)
> ---- %< ----
===================================================================
--- library.scm (Revision 11558)
+++ library.scm (Arbeitskopie)
@@ -2047,12 +2047,18 @@
(##sys#setslot ##sys#default-parameter-vector i val)
(lambda arg
(let ([n (##sys#size ##sys#current-parameter-vector)])
- (cond [(pair? arg)
+ (cond [(and (pair? arg) (pair? (cdr arg)))
(when (fx>= i n)
(set! ##sys#current-parameter-vector
(##sys#grow-vector ##sys#current-parameter-vector (fx+ i 1) ##sys#snafu) ) )
(##sys#setslot ##sys#current-parameter-vector i (guard (##sys#slot arg 0)))
(##core#undefined) ]
+ [(pair? arg)
+ (if (or (fx>= i n)
+ (eq? (##sys#slot ##sys#current-parameter-vector i) ##sys#snafu))
+ (##sys#setslot ##sys#default-parameter-vector i (guard (##sys#slot arg 0)))
+ (##sys#setslot ##sys#current-parameter-vector i (guard (##sys#slot arg 0))))
+ (##core#undefined) ]
[(fx>= i n)
(##sys#slot ##sys#default-parameter-vector i) ]
[else
Index: chicken-more-macros.scm
===================================================================
--- chicken-more-macros.scm (Revision 11558)
+++ chicken-more-macros.scm (Arbeitskopie)
@@ -213,7 +213,7 @@
[aliases2 (##sys#map (lambda (z) (gensym)) params)] )
`(let ,(##sys#append (map ##sys#list aliases params) (map ##sys#list aliases2 vals))
(let ((,swap (lambda ()
- ,@(map (lambda (a a2) `(let ((t (,a))) (,a ,a2) (##core#set! ,a2 t)))
+ ,@(map (lambda (a a2) `(let ((t (,a))) (,a ,a2 'local) (##core#set! ,a2 t)))
aliases aliases2) ) ) )
(##sys#dynamic-wind
,swap
_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users