change record API; remove record-of? and add record-type

This commit is contained in:
Yuichi Nishiwaki 2014-08-06 11:30:14 +09:00
parent bac96b2e54
commit 7b251a7129
3 changed files with 10 additions and 11 deletions

View File

@ -20,7 +20,7 @@ struct pic_record {
struct pic_record *pic_record_new(pic_state *, pic_value); struct pic_record *pic_record_new(pic_state *, pic_value);
bool pic_record_of(pic_state *, struct pic_record *, pic_value); pic_value pic_record_type(pic_state *, struct pic_record *);
pic_value pic_record_ref(pic_state *, struct pic_record *, pic_sym); pic_value pic_record_ref(pic_state *, struct pic_record *, pic_sym);
void pic_record_set(pic_state *, struct pic_record *, pic_sym, pic_value); void pic_record_set(pic_state *, struct pic_record *, pic_sym, pic_value);

View File

@ -773,7 +773,8 @@
(name (car (cdr (cdr form))))) (name (car (cdr (cdr form)))))
`(define (,name obj) `(define (,name obj)
(and (record? obj) (and (record? obj)
(record-of? obj ,rectype))))))) (eq? (record-type obj)
,rectype)))))))
(define-syntax define-record-field (define-syntax define-record-field
(ir-macro-transformer (ir-macro-transformer

View File

@ -17,12 +17,12 @@ pic_record_new(pic_state *pic, pic_value rectype)
return rec; return rec;
} }
bool pic_value
pic_record_of(pic_state *pic, struct pic_record *rec, pic_value rectype) pic_record_type(pic_state *pic, struct pic_record *rec)
{ {
UNUSED(pic); UNUSED(pic);
return pic_eq_p(rec->rectype, rectype); return rec->rectype;
} }
pic_value pic_value
@ -37,7 +37,6 @@ pic_record_ref(pic_state *pic, struct pic_record *rec, pic_sym slot)
return xh_val(e, pic_value); return xh_val(e, pic_value);
} }
void void
pic_record_set(pic_state *pic, struct pic_record *rec, pic_sym slot, pic_value val) pic_record_set(pic_state *pic, struct pic_record *rec, pic_sym slot, pic_value val)
{ {
@ -70,14 +69,13 @@ pic_record_record_p(pic_state *pic)
} }
static pic_value static pic_value
pic_record_record_of(pic_state *pic) pic_record_record_type(pic_state *pic)
{ {
struct pic_record *rec; struct pic_record *rec;
pic_value rectype;
pic_get_args(pic, "ro", &rec, &rectype); pic_get_args(pic, "r", &rec);
return pic_bool_value(pic_record_of(pic, rec, rectype)); return pic_record_type(pic, rec);
} }
static pic_value static pic_value
@ -111,7 +109,7 @@ pic_init_record(pic_state *pic)
pic_deflibrary (pic, "(picrin record)") { pic_deflibrary (pic, "(picrin record)") {
pic_defun(pic, "make-record", pic_record_make_record); pic_defun(pic, "make-record", pic_record_make_record);
pic_defun(pic, "record?", pic_record_record_p); pic_defun(pic, "record?", pic_record_record_p);
pic_defun(pic, "record-of?", pic_record_record_of); pic_defun(pic, "record-type", pic_record_record_type);
pic_defun(pic, "record-ref", pic_record_record_ref); pic_defun(pic, "record-ref", pic_record_record_ref);
pic_defun(pic, "record-set!", pic_record_record_set); pic_defun(pic, "record-set!", pic_record_record_set);
} }