[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#63135] [PATCH 1/3] records: match-record: Raise a syntax error if T
From: |
( |
Subject: |
[bug#63135] [PATCH 1/3] records: match-record: Raise a syntax error if TYPE is nonexistent. |
Date: |
Thu, 27 Apr 2023 23:06:51 +0100 |
* 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>
---
guix/records.scm | 11 ++++++++---
1 file 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 @@ (define (report-duplicate-field-specifier name ctor)
(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 @@ (define-syntax type
"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 @@ (define-syntax match-record-inner
#'(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 ...)
base-commit: d59b4764f3171b1430a6d3b954659b8aab730475
--
2.39.2
- [bug#63135] [PATCH 0/3] MATCH-RECROD improvements, (, 2023/04/27
- [bug#63135] [PATCH 1/3] records: match-record: Raise a syntax error if TYPE is nonexistent.,
( <=
- [bug#63135] [PATCH v2 0/5] MATCH-RECORD improvements, (, 2023/04/28
- [bug#63135] [PATCH v2 1/5] records: match-record: Raise a syntax error if TYPE is nonexistent., (, 2023/04/28
- [bug#63135] [PATCH v2 5/5] records: Add MATCH-RECORD-LAMBDA., (, 2023/04/28
- [bug#63135] [PATCH v2 2/5] records: match-record: Display more helpful field-not-found error., (, 2023/04/28
- [bug#63135] [PATCH v2 3/5] records: match-record: Support thunked and delayed fields., (, 2023/04/28
- [bug#63135] [PATCH v2 4/5] dir-locals: Fix MATCH-RECORD indentation., (, 2023/04/28