Ludovic Courtès
6c35641453
tests: Avoid sequence of zero expressions.
...
* tests/records.scm ("define-record-type* with let* behavior"): Add missing
body for clause.
2015-06-11 23:33:32 +02:00
Ludovic Courtès
8a16d064fa
records: Add support for 'innate' fields.
...
* guix/records.scm (make-syntactic-constructor): Add #:innate parameter.
[record-inheritance]: Honor it.
[innate-field?]: New procedure.
(define-record-type*)[innate-field?]: New procedure.
Pass #:innate to 'make-syntactic-constructor'.
* tests/records.scm ("define-record-type* & inherit & innate",
"define-record-type* & thunked & innate"): New tests.
2015-06-11 23:33:32 +02:00
Ludovic Courtès
310b32a2a6
records: Add support for delayed fields.
...
* guix/records.scm (make-syntactic-constructor): Add #:delayed
parameter.
[delayed-field?]: New procedure.
[wrap-field-value]: Use it.
(define-record-type*)[delayed-field?, wrapped-field?]: New procedures.
[thunked-field-accessor-name]: Rename to...
[wrapped-field-accessor-name]: ... this.
[field-spec->srfi-9]: Change 'thunked' to 'wrapped'.
[delayed-field-accessor-definition]: New procedure.
Compute delayed-field accessors and emit them. Pass #:delayed to
'make-syntactic-constructor'.
* tests/records.scm ("define-record-type* & delayed",
"define-record-type* & delayed & default",
"define-record-type* & delayed & inherited"): New tests.
2015-01-19 23:30:42 +01:00
Ludovic Courtès
a1906758c3
records: Report unknown field names in inheriting forms.
...
* guix/records.scm (define-record-type*)[record-inheritance]: Check for
unexpected field names.
* tests/records.scm ("define-record-type* with let* behavior"): Return
#t, not *unspecified*.
("define-record-type* & inherit & extra initializers"): New test.
2014-07-17 16:45:45 +02:00
Ludovic Courtès
23e9a68088
records: Add tests for error cases.
...
* tests/records.scm (test-module): New procedure.
("define-record-type* & missing initializers",
"define-record-type* & extra initializers"): New tests.
2014-07-17 16:06:36 +02:00
Ludovic Courtès
59fbeb8cae
records: define-record-type*: Field bindings are bound with 'let*'.
...
* guix/records.scm (define-record-type*): Wrap field bindings in a
'let*', not in a 'letrec*', which turned out to be pointlessly
inconvenient.
* tests/records.scm: Adjust test names accordingly.
2013-10-15 23:31:22 +02:00
Ludovic Courtès
836d10f154
records: `recutils->alist' recognizes lines starting with a `+'.
...
* guix/records.scm (%recutils-plus-rx): New variable.
(recutils->alist): Use it to read + lines.
* tests/records.scm ("recutils->alist with + lines"): New test.
2013-07-10 21:53:29 +02:00
Ludovic Courtès
c8772a7a21
records: `alist->record' supports multiple-field occurrences.
...
* guix/records.scm (alist->record): Add `multiple-value-keys'
parameter. Update docstring, and honor it.
* tests/records.scm ("alist->record"): New record.
2013-07-10 21:52:51 +02:00
Ludovic Courtès
b7b8828801
records: `recutils->alist' recognizes comments.
...
* guix/records.scm (%recutils-comment-rx): New variable.
(recutils->alist): Match comments.
* tests/records.scm ("recutils->alist"): Add comments.
2013-07-10 18:01:12 +02:00
Ludovic Courtès
fdc1bf659d
records: Add `recutils->alist' for public consumption.
...
* guix/records.scm (%recutils-field-rx): New variable.
(recutils->alist): New procedure, formerly known as `fields->alist'.
* guix/scripts/substitute-binary.scm (fields->alist): Use it.
* tests/records.scm ("recutils->alist"): New test.
2013-07-10 17:01:08 +02:00
Ludovic Courtès
c0cd1b3ea7
Move record utilities to (guix records).
...
* guix/utils.scm (define-record-type*): Move to...
* guix/records.scm: ... here. New file.
* guix/build-system.scm, guix/packages.scm: Use it.
* guix/gnu-maintenance.scm: Likewise.
(official-gnu-packages)[alist->record]: Remove.
* guix/scripts/substitute-binary.scm: Likewise.
(alist->record, object->fields): Remove.
* tests/utils.scm ("define-record-type*", "define-record-type* with
letrec* behavior", "define-record-type* & inherit",
"define-record-type* & inherit & letrec* behavior",
"define-record-type* & thunked", "define-record-type* & thunked &
default", "define-record-type* & thunked & inherited"): Move to...
* tests/records.scm: ... here. New file.
2013-05-12 15:46:16 +02:00