summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-03-29 22:40:55 +0100
committerLudovic Courtès <ludo@gnu.org>2019-03-30 11:08:39 +0100
commitd2be7e3c4ba8d6d0dde9b4c0bff623ab85637424 (patch)
treea9be7eae8e45656e1d6fe9943d4f7e29fe34944a /tests
parentec12e53736f212d700587e096ebee15ffc118c46 (diff)
downloadguix-d2be7e3c4ba8d6d0dde9b4c0bff623ab85637424.tar.gz
records: Support custom 'this' identifiers.
This lets record users choose an identifier other than 'this-record'.

* guix/records.scm (make-syntactic-constructor): Add #:this-identifier.
[wrap-field-value]: Honor it.
(define-record-type*): Add form with extra THIS-IDENTIFIER and honor
it.
* tests/records.scm ("define-record-type* & thunked & inherit & custom this"):
New test.
Diffstat (limited to 'tests')
-rw-r--r--tests/records.scm18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/records.scm b/tests/records.scm
index 45614093a0..16b7a9c35e 100644
--- a/tests/records.scm
+++ b/tests/records.scm
@@ -210,6 +210,24 @@
            (= 40 (foo-bar z))
            (= -2 (foo-baz z))))))
 
+(test-assert "define-record-type* & thunked & inherit & custom this"
+  (let ()
+    (define-record-type* <foo> foo make-foo
+      foo? this-foo
+      (thing foo-thing (thunked)))
+    (define-record-type* <bar> bar make-bar
+      bar? this-bar
+      (baz bar-baz (thunked)))
+
+    ;; Nest records and test the two self references.
+    (let* ((x (foo (thing (bar (baz (list this-bar this-foo))))))
+           (y (foo-thing x)))
+      (match (bar-baz y)
+        ((first second)
+         (and (eq? second x)
+              (bar? first)
+              (eq? first y)))))))
+
 (test-assert "define-record-type* & delayed"
   (begin
     (define-record-type* <foo> foo make-foo