aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ccwl/ccwl.scm12
-rw-r--r--tests/ccwl.scm6
2 files changed, 12 insertions, 6 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm
index 00d503f..b158947 100644
--- a/ccwl/ccwl.scm
+++ b/ccwl/ccwl.scm
@@ -412,12 +412,12 @@ object or a <cwl-workflow> object."
object) described by syntax X. If such a ccwl function is not defined,
return #f."
;; TODO: What if function object is defined in lexical scope?
- (let ((var (module-variable (current-module)
- (syntax->datum x))))
- (and var
- (or (command? (variable-ref var))
- (cwl-workflow? (variable-ref var)))
- (variable-ref var))))
+ (let ((result (false-if-exception
+ (eval (syntax->datum x)
+ (interaction-environment)))))
+ (and (or (command? result)
+ (cwl-workflow? result))
+ result)))
(define (collect-steps x input-keys)
"Traverse ccwl workflow body X and return two values---a list of
diff --git a/tests/ccwl.scm b/tests/ccwl.scm
index 9aa00f3..2207200 100644
--- a/tests/ccwl.scm
+++ b/tests/ccwl.scm
@@ -139,4 +139,10 @@
(workflow ()
(print-with-default)))
+(test-assert "allow steps with expressions that evaluate to commands"
+ (workflow ((message #:type string))
+ ((and #t print)
+ (print)
+ #:message message)))
+
(test-end "ccwl")