GNU bug report logs -
#54652
[PATCH 1/2] guix: Only check the object type once in the MATCH-RECORD expansion.
Previous Next
Reported by: Attila Lendvai <attila <at> lendvai.name>
Date: Thu, 31 Mar 2022 12:49:01 UTC
Severity: normal
Tags: patch
Done: Attila Lendvai <attila <at> lendvai.name>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
* guix/records.scm (match-record/fields): New macro.
(match-record): Only check the object type once in the expansion.
---
guix/records.scm | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/guix/records.scm b/guix/records.scm
index ed94c83dac..e311086d73 100644
--- a/guix/records.scm
+++ b/guix/records.scm
@@ -535,17 +535,25 @@ (define (recutils->alist port)
(else
(error "unmatched line" line))))))))
+(define-syntax match-record/fields
+ (syntax-rules ()
+ ((_ record type (field fields ...) body ...)
+ (let ((field ((record-accessor type 'field) record)))
+ ;; TODO compute indices and report wrong-field-name errors at
+ ;; expansion time
+ ;; TODO support thunked and delayed fields
+ (match-record/fields record type (fields ...) body ...)))
+ ((_ record type () body ...)
+ (begin body ...))))
+
(define-syntax match-record
(syntax-rules ()
"Bind each FIELD of a RECORD of the given TYPE to it's FIELD name.
The current implementation does not support thunked and delayed fields."
((_ record type (field fields ...) body ...)
(if (eq? (struct-vtable record) type)
- ;; TODO compute indices and report wrong-field-name errors at
- ;; expansion time
- ;; TODO support thunked and delayed fields
- (let ((field ((record-accessor type 'field) record)))
- (match-record record type (fields ...) body ...))
+ ;; So that we only test the type once.
+ (match-record/fields record type (field fields ...) body ...)
(throw 'wrong-type-arg record)))
((_ record type () body ...)
(begin body ...))))
--
2.34.0
This bug report was last modified 2 years and 182 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.