Index: debian/rules =================================================================== --- debian/rules (Revision 11596) +++ debian/rules (Arbeitskopie) @@ -17,6 +17,7 @@ dh_testdir $(MAKE) \ USE_HOST_PCRE=1 \ + DEBUGBUILD=1 \ CFLAGS="$(CFLAGS)" \ PREFIX="$(PREFIX)" \ MANDIR="$(PREFIX)/share/man" \ @@ -66,7 +67,7 @@ # The asterisk in chicken.info* is necessary, because Debian makeinfo # is very different from the standard makeinfo, and it is incredibly # difficult to convince it to produce standalone Texinfo files. - dh_installinfo chicken.info* +# dh_installinfo chicken.info* dh_installchangelogs ChangeLog.* dh_install --sourcedir=debian/tmp dh_link Index: library.scm =================================================================== --- library.scm (Revision 11596) +++ library.scm (Arbeitskopie) @@ -2036,8 +2036,14 @@ (define make-parameter (let ([count 0]) - (lambda (init . guard) - (let* ([guard (if (pair? guard) (car guard) (lambda (x) x))] + (lambda (init . guard+type) + (let* ([guard (if (pair? guard+type) (##sys#slot guard+type 0) (lambda (x) x))] + [rest (and (pair? guard+type) (##sys#slot guard+type 1))] + [type (if (pair? rest) + (case (##sys#slot rest 0) + ((#:shared) #:shared) + (else (##sys#signal-hook #:syntax-error 'make-parameter (##sys#slot rest 0)))) + #f)] [val (guard init)] [i count] ) (set! count (fx+ count 1)) @@ -2047,7 +2053,13 @@ (##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) (eq? type #:shared) (null? (cdr 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) ] + [(pair? arg) (when (fx>= i n) (set! ##sys#current-parameter-vector (##sys#grow-vector ##sys#current-parameter-vector (fx+ i 1) ##sys#snafu) ) ) @@ -2061,6 +2073,8 @@ (##sys#slot ##sys#default-parameter-vector i) val) ) ] ) ) ) ) ) ) ) +(define (make-shared-parameter init . guard) + (make-parameter init (if (pair? guard) (car guard) (lambda (v) v)) #:shared)) ;;; Input: Index: chicken-more-macros.scm =================================================================== --- chicken-more-macros.scm (Revision 11596) +++ 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