diff options
author | Arun Isaac | 2023-11-18 00:00:45 +0000 |
---|---|---|
committer | Arun Isaac | 2023-11-18 00:02:57 +0000 |
commit | 52f486fc3855c20f2ef092cdd17437bfc16302f6 (patch) | |
tree | 7090a6a515343734a9aef863d9f7a87e0517972d /ccwl | |
parent | 1345e9492207629430df3fd4951a1c403b39946a (diff) | |
download | ccwl-52f486fc3855c20f2ef092cdd17437bfc16302f6.tar.gz ccwl-52f486fc3855c20f2ef092cdd17437bfc16302f6.tar.lz ccwl-52f486fc3855c20f2ef092cdd17437bfc16302f6.zip |
ccwl: Restrict #:binding parameter to YAML serializable trees.
* ccwl/ccwl.scm (ensure-yaml-serializable): Accept parameter name for
&formatted-message condition.
(input): Explicitly pass parameter name #:other. Restrict #:binding
parameter to YAML serializable trees.
*
doc/capture-output-file-with-parameter-reference.scm (extract-specific-file),
doc/capture-output-file.scm (extract),
doc/decompress-compile-run.scm (compile): Pass an YAML serializable
tree, not an expression, as the #:binding parameter.
Diffstat (limited to 'ccwl')
-rw-r--r-- | ccwl/ccwl.scm | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm index 3bf2644..dd4a76c 100644 --- a/ccwl/ccwl.scm +++ b/ccwl/ccwl.scm @@ -121,14 +121,16 @@ compared using @code{equal?}." (make-unspecified-default) unspecified-default?) -(define (ensure-yaml-serializable tree) - "Raise an exception unless @var{tree} is serializable to YAML." +(define (ensure-yaml-serializable tree parameter-name) + "Raise an exception unless @var{tree} is serializable to YAML. Use +@var{parameter-name} in @code{&formatted-message} condition." ;; TODO: If tree is a quoted expression, emit a warning. (unless (false-if-exception (scm->yaml-string (syntax->datum tree))) (raise-exception (condition (ccwl-violation tree) - (formatted-message "#:other parameter not serializable to YAML"))))) + (formatted-message (string-append parameter-name + " parameter not serializable to YAML")))))) (define (construct-type-syntax type-spec) "Return syntax to build a type from @var{type-spec}." @@ -186,7 +188,7 @@ compared using @code{equal?}." (condition (ccwl-violation stage?) (formatted-message "Invalid #:stage? parameter ~a. #:stage? must either be #t or #f." (syntax->datum stage?))))) - (ensure-yaml-serializable other) + (ensure-yaml-serializable other "#:other") (let ((position #f) (prefix #f)) #`(make-input '#,id @@ -244,10 +246,11 @@ compared using @code{equal?}." (condition (ccwl-violation output-spec) (formatted-message "Output has no identifier"))))))) (apply (syntax-lambda** (id #:key (type #'File) binding source (other #'())) - (ensure-yaml-serializable other) + (ensure-yaml-serializable binding "#:binding") + (ensure-yaml-serializable other "#:other") #`(make-output '#,id #,(construct-type-syntax type) - #,binding #,source '#,other)) + '#,binding #,source '#,other)) #'(id args ...)))) (id (identifier? #'id) (output #'(id))) (_ (error "Invalid output:" (syntax->datum output-spec))))) @@ -429,7 +432,7 @@ identifiers defined in the commands." (condition (ccwl-violation x) (formatted-message "Missing ~a key in command definition" #:run)))) - (ensure-yaml-serializable other) + (ensure-yaml-serializable other "#:other") #`(make-command (list #,@(map (lambda (input-spec) (let ((id (input-spec-id input-spec))) |