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);
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);
void pic_record_set(pic_state *, struct pic_record *, pic_sym, pic_value);

View File

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

View File

@ -17,12 +17,12 @@ pic_record_new(pic_state *pic, pic_value rectype)
return rec;
}
bool
pic_record_of(pic_state *pic, struct pic_record *rec, pic_value rectype)
pic_value
pic_record_type(pic_state *pic, struct pic_record *rec)
{
UNUSED(pic);
return pic_eq_p(rec->rectype, rectype);
return rec->rectype;
}
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);
}
void
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
pic_record_record_of(pic_state *pic)
pic_record_record_type(pic_state *pic)
{
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
@ -111,7 +109,7 @@ pic_init_record(pic_state *pic)
pic_deflibrary (pic, "(picrin record)") {
pic_defun(pic, "make-record", pic_record_make_record);
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-set!", pic_record_record_set);
}