aboutsummaryrefslogtreecommitdiff
path: root/module/util.scm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--module/util.scm15
1 files changed, 13 insertions, 2 deletions
diff --git a/module/util.scm b/module/util.scm
index a2ab43c3..717c61d8 100644
--- a/module/util.scm
+++ b/module/util.scm
@@ -193,11 +193,22 @@
(define-public (swap f)
(lambda args (apply f (reverse args))))
+
+(define-syntax case*%
+ (syntax-rules (else)
+ [(_ _ else)
+ #t]
+ [(_ invalue (value ...))
+ (memv invalue (list value ...))]
+ #;
+ [(_ invalue target)
+ (eq? invalue target)]))
+
;; Like `case', but evals the case parameters
(define-syntax case*
(syntax-rules (else)
- [(_ invalue ((value ...) body ...) ...)
- (cond ((memv invalue (list value ...))
+ [(_ invalue (cases body ...) ...)
+ (cond ((case*% invalue cases)
body ...)
...)]))