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

Reply via email to