From 9038939bd1233a47e7691e0c4b259bb68a31622c Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Thu, 10 Oct 2013 17:06:26 +0900 Subject: [PATCH] add some pair functions --- include/picrin.h | 4 ++++ src/pair.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/pair.c diff --git a/include/picrin.h b/include/picrin.h index 047dea57..6dcc8afe 100644 --- a/include/picrin.h +++ b/include/picrin.h @@ -13,4 +13,8 @@ void pic_free(pic_state *, void *); pic_state *pic_open(); void pic_close(pic_state *); +pic_value pic_cons(pic_state *pic, pic_value, pic_value); +pic_value pic_car(pic_state *pic, pic_value); +pic_value pic_cdr(pic_state *pic, pic_value); + #endif diff --git a/src/pair.c b/src/pair.c new file mode 100644 index 00000000..3b4c4ad2 --- /dev/null +++ b/src/pair.c @@ -0,0 +1,33 @@ +#include "picrin.h" + +pic_value +pic_cons(pic_state *pic, pic_value car, pic_value cdr) +{ + struct pic_pair *pair; + + pair = (struct pic_pair *)pic_gc_alloc(pic, sizeof(struct pic_pair), PIC_TT_PAIR); + pair->car = car; + pair->cdr = cdr; + + return pic_obj_value(pair); +} + +pic_value +pic_car(pic_state *pic, pic_value obj) +{ + struct pic_pair *pair; + + pair = (struct pic_pair *)obj->u->data; + + return pair->car; +} + +pic_value +pic_cdr(pic_state *pic, pic_value obj) +{ + struct pic_pair *pair; + + pair = (struct pic_pair *)obj->u->data; + + return pair->cdr; +}