diff --git a/lib/srfi/39/syntax-no-threads.scm b/lib/srfi/39/syntax-no-threads.scm new file mode 100644 index 00000000..a26167f0 --- /dev/null +++ b/lib/srfi/39/syntax-no-threads.scm @@ -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))))