aboutsummaryrefslogtreecommitdiff
path: root/module/util.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2019-11-04 17:08:38 +0100
committerHugo Hörnquist <hugo@hornquist.se>2019-11-05 11:21:25 +0100
commit4080b0c7e97acb7357a7ab85589b324e382e0d47 (patch)
tree3ed5e38c94ee306311d497cda397cab38d173e73 /module/util.scm
parentFurther cleanup in (vcomponent). (diff)
downloadcalp-4080b0c7e97acb7357a7ab85589b324e382e0d47.tar.gz
calp-4080b0c7e97acb7357a7ab85589b324e382e0d47.tar.xz
Add let-env.
Diffstat (limited to 'module/util.scm')
-rw-r--r--module/util.scm16
1 files changed, 15 insertions, 1 deletions
diff --git a/module/util.scm b/module/util.scm
index 707cba90..0d4d20d6 100644
--- a/module/util.scm
+++ b/module/util.scm
@@ -12,7 +12,7 @@
re-export-modules
use-modules*
-> set aif
- tree-map let-lazy)
+ tree-map let-lazy let-env)
#:replace (let* set! define-syntax
when unless if))
@@ -374,3 +374,17 @@
[(set (acc obj) = (op rest ...))
(set-fields
obj ((acc) (op (acc obj) rest ...)))]))
+
+
+
+;; TODO multiple values
+(define-syntax let-env
+ (syntax-rules ()
+ [(_ ((name value))
+ body ...)
+ (let ((sname (symbol->string (quote name))))
+ (let ((ogenv (getenv sname)))
+ (setenv sname value)
+ (let ((return (begin body ...)))
+ (setenv sname ogenv)
+ return)))]))