diff options
author | (unmatched-parenthesis <paren@disroot.org> | 2023-04-28 20:19:01 +0100 |
---|---|---|
committer | Josselin Poiret <dev@jpoiret.xyz> | 2023-06-04 10:34:33 +0200 |
commit | 1a4aace3af85bdfd5f513a4c5bb6925d1d0f50be (patch) | |
tree | ecc7d71fdedc813b055aa9ddc003f0aced6c89ae | |
parent | f72f3a909a41dce5dc4512c30d4cd0673bc6560f (diff) |
records: match-record: Raise a syntax error if TYPE is nonexistent.
* guix/records.scm (match-record): Raise a human-compherensible syntax error
if the given record type identifier is unbound.
Co-authored-by: Josselin Poiret <dev@jpoiret.xyz>
Signed-off-by: Josselin Poiret <dev@jpoiret.xyz>
-rw-r--r-- | guix/records.scm | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/guix/records.scm b/guix/records.scm index 7d43b064d8..d8966998c1 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -105,7 +105,12 @@ error-reporting purposes." (define-syntax map-fields (lambda (x) - (syntax-violation 'map-fields "bad use of syntactic keyword" x x))) + (syntax-case x () + ((_ type within) + (syntax-violation (syntax->datum #'within) + "undefined guix record-type" + #'type)) + (_ (syntax-violation 'map-fields "bad use of syntactic keyword" x x))))) (define-syntax-parameter this-record (lambda (s) @@ -459,7 +464,7 @@ inherited." "This macro lets us query record type info at macro-expansion time." (syntax-case s (map-fields) - ((_ map-fields macro) + ((_ (map-fields _ _) macro) #'(macro (field ...))) (id (identifier? #'id) @@ -595,7 +600,7 @@ found." #'(let-syntax ((field-offset (syntax-rules () ((_ f) (lookup-field field 0 f))))) - (let* ((offset (type map-fields field-offset)) + (let* ((offset (type (map-fields type match-record) field-offset)) (variable (struct-ref record offset))) (match-record-inner record type (rest ...) body ...)))) ((_ record type (field rest ...) body ...) |