mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-16 17:37:34 +02:00
adding file necessary for non-threaded parameters
This commit is contained in:
parent
cf115ef033
commit
f6c3d1d415
1 changed files with 40 additions and 0 deletions
40
lib/srfi/39/syntax-no-threads.scm
Normal file
40
lib/srfi/39/syntax-no-threads.scm
Normal file
|
@ -0,0 +1,40 @@
|
|||
;; param.scm -- SRFI-39 parameters
|
||||
;; Copyright (c) 2010-2011 Alex Shinn. All rights reserved.
|
||||
;; BSD-style license: http://synthcode.com/license.txt
|
||||
|
||||
(define (parameter-convert param value)
|
||||
(let ((proc (parameter-converter param)))
|
||||
(if (procedure? proc)
|
||||
(proc value)
|
||||
value)))
|
||||
|
||||
(define (make-parameter init . o)
|
||||
(let ((conv (and (pair? o) (car o))))
|
||||
(%make-parameter (if conv (conv init) init) conv)))
|
||||
|
||||
(define-syntax parameterize
|
||||
(syntax-rules ()
|
||||
((parameterize ("step")
|
||||
((param value p old new) ...)
|
||||
()
|
||||
body)
|
||||
(let ((p param) ...)
|
||||
(let ((old (p)) ...
|
||||
(new (parameter-convert p value)) ...)
|
||||
(dynamic-wind
|
||||
(lambda () (p new) ...)
|
||||
(lambda () . body)
|
||||
(lambda () (p old) ...)))))
|
||||
((parameterize ("step")
|
||||
args
|
||||
((param value) . rest)
|
||||
body)
|
||||
(parameterize ("step")
|
||||
((param value p old new) . args)
|
||||
rest
|
||||
body))
|
||||
((parameterize ((param value) ...) . body)
|
||||
(parameterize ("step")
|
||||
()
|
||||
((param value) ...)
|
||||
body))))
|
Loading…
Add table
Reference in a new issue