aboutsummaryrefslogtreecommitdiff
path: root/module/util.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2020-01-13 03:00:26 +0100
committerHugo Hörnquist <hugo@hornquist.se>2020-01-13 03:00:26 +0100
commit4fb7d3744fa9fda3a3fef74f297a12142e94fe81 (patch)
tree8140bd1823ed2c070bacc3e08548ed58db8ac3be /module/util.scm
parentUtil set-> macro. (diff)
downloadcalp-4fb7d3744fa9fda3a3fef74f297a12142e94fe81.tar.gz
calp-4fb7d3744fa9fda3a3fef74f297a12142e94fe81.tar.xz
Multiple values for let-env.
Diffstat (limited to 'module/util.scm')
-rw-r--r--module/util.scm21
1 files changed, 13 insertions, 8 deletions
diff --git a/module/util.scm b/module/util.scm
index 910a2400..31fd9997 100644
--- a/module/util.scm
+++ b/module/util.scm
@@ -389,14 +389,19 @@
-;; TODO multiple values
(define-syntax let-env
(syntax-rules ()
- [(_ ((name value))
+ [(_ ((name value) ...)
body ...)
- (let ((sname (symbol->string (quote name))))
- (let ((ogenv (getenv sname)))
- (setenv sname value)
- (let ((return (begin body ...)))
- (setenv sname ogenv)
- return)))]))
+
+ (let ((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)
+ (let ((return (begin body ...)))
+ (for-each (lambda (pair) (setenv (car pair) (caddr pair)))
+ env-pairs)
+ return))]))