diff options
author | Hugo Hörnquist <hugo@hornquist.se> | 2019-11-04 17:08:38 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@hornquist.se> | 2019-11-05 11:21:25 +0100 |
commit | 4080b0c7e97acb7357a7ab85589b324e382e0d47 (patch) | |
tree | 3ed5e38c94ee306311d497cda397cab38d173e73 /module/util.scm | |
parent | Further cleanup in (vcomponent). (diff) | |
download | calp-4080b0c7e97acb7357a7ab85589b324e382e0d47.tar.gz calp-4080b0c7e97acb7357a7ab85589b324e382e0d47.tar.xz |
Add let-env.
Diffstat (limited to '')
-rw-r--r-- | module/util.scm | 16 |
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)))])) |