aboutsummaryrefslogtreecommitdiff
path: root/module/hnh/util
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-05-11 20:48:27 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2022-05-11 20:48:51 +0200
commitf6da8bc8a634a218e1ca4e87238abcc3c188d29e (patch)
treea968674beae9402545d44ee9e68593b8df4dd264 /module/hnh/util
parentRemove arbitary_kv.js. (diff)
downloadcalp-f6da8bc8a634a218e1ca4e87238abcc3c188d29e.tar.gz
calp-f6da8bc8a634a218e1ca4e87238abcc3c188d29e.tar.xz
Move let-env to own module.
Diffstat (limited to 'module/hnh/util')
-rw-r--r--module/hnh/util/env.scm25
1 files changed, 25 insertions, 0 deletions
diff --git a/module/hnh/util/env.scm b/module/hnh/util/env.scm
new file mode 100644
index 00000000..a6877186
--- /dev/null
+++ b/module/hnh/util/env.scm
@@ -0,0 +1,25 @@
+(define-module (hnh util env)
+ :export (let-env))
+
+(define-syntax let-env
+ (syntax-rules ()
+ [(_ ((name value) ...)
+ body ...)
+
+ (let ((env-pairs #f))
+ (dynamic-wind
+ (lambda ()
+ (set! env-pairs
+ (map (lambda (n new-value)
+ (list n new-value (getenv n)))
+ (list (symbol->string (quote name)) ...)
+ (list value ...)))
+ (for-each (lambda (pair) (setenv (car pair) (cadr pair)))
+ env-pairs))
+ (lambda () body ...)
+ (lambda ()
+ (for-each (lambda (pair) (setenv (car pair) (caddr pair)))
+ env-pairs))))]))
+
+
+