summaryrefslogtreecommitdiff
path: root/module/srfi/srfi-9
Commit message (Collapse)AuthorAgeFilesLines
* doc: Fix typo in `set-record-type-printer!' doc.Ludovic Courtès2012-11-171-3/+3
| | | | | | * module/srfi/srfi-9/gnu.scm (set-record-type-printer!): Change the parameter name to `proc'. * doc/ref/api-compound.texi (SRFI-9 Records): Update accordingly.
* Change the argument order of 'set-fields' to match that of 'set-fields'.Mark H Weaver2012-11-101-2/+2
| | | | | | | * module/srfi/srfi-9/gnu.scm (set-fields): Swap order of first two arguments. * test-suite/tests/srfi-9.test: Update tests.
* Improve error for set-fields paths leading to different types.Mark H Weaver2012-11-101-19/+59
| | | | | | | | | | | | | | | | | | | | | | | * module/system/base/ck.scm: New module. * module/srfi/srfi-9.scm: Import (system base ck). (getter-type, getter-index, getter-copier): Convert incoming argument convention to CK form. (define-tagged-inlinable): Convert return value convention for key lookup to CK form. * module/srfi/srfi-9/gnu.scm: Import (system base ck). Rename '%set-fields-unknown-getter' to 'unknown-getter'. (c-list, c-same-type-check): New macros. (%set-fields): Using the CK abstract machine, arrange to check (at macro expansion time) that all of the getters in head position correspond to the same record type. * test-suite/tests/srfi-9.test: Add test.
* Improve error messages for invalid record definitions.Mark H Weaver2012-11-091-1/+3
| | | | | | | | | | | | | | * module/srfi/srfi-9.scm (%define-record-type): Accept additional 'form' parameter which contains the original form of 'define-record-type' or 'define-immutable-record-type'. Add elaborate pattern guard which raises descriptive syntax errors for specific errors, and a fallback pattern to catch anything else. (define-record-type): Pass 'form' parameter to %define-record-type. * module/srfi/srfi-9/gnu.scm (define-immutable-record-type): Pass 'form' parameter to %define-record-type. * test-suite/tests/srfi-9.test: Add tests.
* Implement functional record setters.Mark H Weaver2012-11-081-2/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Written in collaboration with Ludovic Courtès <ludo@gnu.org> * module/srfi/srfi-9.scm: Internally, rename 'accessor' to 'getter' and 'modifier' to 'setter'. (define-tagged-inlinable, getter-type, getter-index, getter-copier, %%on-error, %%set-fields): New macros. (%define-record-type): New macro for creating both mutable and immutable records, and containing a substantially rewritten version of the code formerly in 'define-record-type'. (define-record-type): Now just a wrapper for '%define-record-type'. (throw-bad-struct, make-copier-id): New procedures. * module/srfi/srfi-9/gnu.scm (define-immutable-record-type, set-field, and set-fields): New exported macros. (collate-set-field-specs): New procedure. (%set-fields-unknown-getter, %set-fields): New macros. * test-suite/tests/srfi-9.test: Add tests. Rename getters and setters in existing tests to make the functional setters look better.
* Record printer fixesNo Itisnt2010-05-271-2/+3
| | | | | | * doc/ref/srfi-modules.texi: Fix style * module/srfi/srfi-9/gnu.scm (set-record-type-printer!): renamed from set-record-printer!
* * doc/ref/srfi-modules.texi:No Itisnt2010-05-251-5/+3
| | | | | * module/srfi/srfi-9/gnu.scm: rename `define-record-printer' to `set-record-printer!' to reflect the fact that the printer is set at runtime
* add custom record printersNo Itisnt2010-05-251-0/+31
* doc/ref/srfi-modules.texi: update documentation * module/srfi/srfi-9/gnu.scm: add `define-record-printer'