1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-07-02 15:40:38 +02:00

define* in record-constructor

* module/ice-9/boot-9.scm (record-constructor): Use define*.
This commit is contained in:
Andy Wingo 2010-05-21 23:35:24 +02:00
parent b2669c41a7
commit d44a0d12b4

View file

@ -717,17 +717,16 @@ If there is no handler at all, Guile prints an error and then exits."
(struct-ref obj (+ 1 vtable-offset-user))
(error 'not-a-record-type obj)))
(define (record-constructor rtd . opt)
(if (null? opt)
(define* (record-constructor rtd #:optional field-names)
(if (not field-names)
(struct-ref rtd (+ 2 vtable-offset-user))
(let ((field-names (car opt)))
(primitive-eval
`(lambda ,field-names
(make-struct ',rtd 0 ,@(map (lambda (f)
(if (memq f field-names)
f
#f))
(record-type-fields rtd))))))))
(primitive-eval
`(lambda ,field-names
(make-struct ',rtd 0 ,@(map (lambda (f)
(if (memq f field-names)
f
#f))
(record-type-fields rtd)))))))
(define (record-predicate rtd)
(lambda (obj) (and (struct? obj) (eq? rtd (struct-vtable obj)))))