From 7b251a7129757079faaa0ee4d72e89b1a0ecbcbd Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Wed, 6 Aug 2014 11:30:14 +0900 Subject: [PATCH] change record API; remove record-of? and add record-type --- include/picrin/record.h | 2 +- piclib/scheme/base.scm | 3 ++- src/record.c | 16 +++++++--------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/include/picrin/record.h b/include/picrin/record.h index 32ca9223..0c183977 100644 --- a/include/picrin/record.h +++ b/include/picrin/record.h @@ -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); diff --git a/piclib/scheme/base.scm b/piclib/scheme/base.scm index f689a4f9..8d10bbf2 100644 --- a/piclib/scheme/base.scm +++ b/piclib/scheme/base.scm @@ -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 diff --git a/src/record.c b/src/record.c index e68cdfd4..f97a6ff0 100644 --- a/src/record.c +++ b/src/record.c @@ -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); }