diff --git a/functional-tests/utils.scm b/functional-tests/utils.scm index c47b43b..d50358b 100644 --- a/functional-tests/utils.scm +++ b/functional-tests/utils.scm @@ -2,7 +2,8 @@ (utils) (export inc! dec! - swap!) + swap! + fluid-let) (import (rnrs)) (define-syntax inc! @@ -21,4 +22,16 @@ (let ((tmp x)) (set! x y) (set! y tmp))))) + + (define-syntax fluid-let + (syntax-rules () + ((_ ((x e)) b1 b2 ...) + (let ((y e)) + (let ((swap (lambda () + (let ((t x)) + (set! x y) + (set! y t))))) + (dynamic-wind swap (lambda () + b1 b2 ...) + swap)))))) )