Implement functional record setters.
authorMark H Weaver <mhw@netris.org>
Wed, 7 Nov 2012 17:21:44 +0000 (12:21 -0500)
committerMark H Weaver <mhw@netris.org>
Fri, 9 Nov 2012 00:20:28 +0000 (19:20 -0500)
commitd9e368979bc2b8faa8859cde833b507e7eb83e7f
tree30378b872824923e1ac1ad73a6989bd12db4e083
parent02a362a665ce462e4fe2409b2e2fc2c0007360f2
Implement functional record setters.

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.
module/srfi/srfi-9.scm
module/srfi/srfi-9/gnu.scm
test-suite/tests/srfi-9.test