aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Isaac2023-10-09 14:51:56 +0100
committerArun Isaac2023-10-09 20:32:39 +0100
commit7dbe776cb56803d9c66a847f5ac3613366754838 (patch)
tree19fc925dec08564921afdb3c9f96955bcf737bfb
parent548cc54bc27b92c3a35a79d1af7440fbad896752 (diff)
downloadccwl-7dbe776cb56803d9c66a847f5ac3613366754838.tar.gz
ccwl-7dbe776cb56803d9c66a847f5ac3613366754838.tar.lz
ccwl-7dbe776cb56803d9c66a847f5ac3613366754838.zip
ccwl: Error out if steps with expression commands have no identifier.
* ccwl/ccwl.scm (collect-steps): Error out if steps with expressions that evaluate to commands have no identifier. * tests/ccwl.scm ("step with expression that evaluates to a command but without a step identifier must raise a &ccwl-violation condition"): New test.
-rw-r--r--ccwl/ccwl.scm6
-rw-r--r--tests/ccwl.scm9
2 files changed, 15 insertions, 0 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm
index b158947..286fd7a 100644
--- a/ccwl/ccwl.scm
+++ b/ccwl/ccwl.scm
@@ -535,6 +535,12 @@ represented by <step> objects."
(pairify (syntax->datum #'(args ...)))))))))
;; ccwl functions with an implicit step identifier
((function args ...)
+ ;; Ensure that steps with expression commands have identifiers.
+ (unless (symbol? (syntax->datum #'function))
+ (raise-exception
+ (condition (ccwl-violation #'function)
+ (formatted-message "Step with expression ~a that evaluates to a command must have identifier"
+ (syntax->datum #'function)))))
(collect-steps #'(function (function) args ...)
input-keys))
;; any other unrecognized syntax
diff --git a/tests/ccwl.scm b/tests/ccwl.scm
index 2207200..4f10450 100644
--- a/tests/ccwl.scm
+++ b/tests/ccwl.scm
@@ -145,4 +145,13 @@
(print)
#:message message)))
+(test-assert "step with expression that evaluates to a command but without a step identifier must raise a &ccwl-violation condition"
+ (guard (exception
+ (else (ccwl-violation? exception)))
+ (begin (macroexpand
+ '(workflow ((message #:type string))
+ ((and #t print)
+ #:message message)))
+ #f)))
+
(test-end "ccwl")