From f6c3d1d4150b2d9c5c374c9c3ab2b48066194b73 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sun, 26 Aug 2012 13:56:10 +0900 Subject: [PATCH] adding file necessary for non-threaded parameters --- lib/srfi/39/syntax-no-threads.scm | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/srfi/39/syntax-no-threads.scm 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))))