about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ccwl/ccwl.scm6
-rw-r--r--tests/ccwl.scm10
2 files changed, 16 insertions, 0 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm
index a476406..f9243aa 100644
--- a/ccwl/ccwl.scm
+++ b/ccwl/ccwl.scm
@@ -307,6 +307,12 @@ identifiers defined in the commands."
                     ((prefix string-arg) (and (string? (syntax->datum #'prefix))
                                               (string? (syntax->datum #'string-arg)))
                      (list #'prefix #'string-arg))
+                    ;; Prefixes that are not strings
+                    ((prefix _)
+                     (raise-exception
+                      (condition (ccwl-violation #'prefix)
+                                 (formatted-message "Invalid prefix ~a. Prefixes must be strings."
+                                                    (syntax->datum #'prefix)))))
                     (_
                      (raise-exception
                       (condition (ccwl-violation x)
diff --git a/tests/ccwl.scm b/tests/ccwl.scm
index 7cbb2c0..b26e854 100644
--- a/tests/ccwl.scm
+++ b/tests/ccwl.scm
@@ -264,4 +264,14 @@
 (test-assert "tolerate prefixed string arguments in command definitions"
   (command #:run "echo" ("-x" "foo")))
 
+(test-assert "command definitions with non-string prefixes in prefixed inputs must raise a &ccwl-violation condition"
+  (guard (exception
+          (else (and (ccwl-violation? exception)
+                     (string=? (formatted-message-format exception)
+                               "Invalid prefix ~a. Prefixes must be strings."))))
+    (begin (macroexpand
+            '(command #:inputs (number #:type int)
+                      #:run "echo" (-x number)))
+           #f)))
+
 (test-end "ccwl")