From 45879deafd8a382a78439f8f26f8d1969fabc7f7 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Sat, 20 Feb 2016 16:12:21 +0900 Subject: [PATCH] move the definiton of pic_checkpoint to object.h --- contrib/10.callcc/callcc.c | 5 +++-- extlib/benz/cont.c | 6 +++--- extlib/benz/include/picrin.h | 6 +++--- extlib/benz/include/picrin/cont.h | 4 ++-- extlib/benz/include/picrin/object.h | 17 +++++++++++++++++ extlib/benz/include/picrin/state.h | 10 +--------- extlib/benz/include/picrin/type.h | 15 ++------------- extlib/benz/pair.c | 4 ++-- extlib/benz/state.c | 2 +- extlib/benz/value.c | 1 + 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/contrib/10.callcc/callcc.c b/contrib/10.callcc/callcc.c index bacfee60..280b8331 100644 --- a/contrib/10.callcc/callcc.c +++ b/contrib/10.callcc/callcc.c @@ -1,11 +1,12 @@ #include "picrin.h" +#include "picrin/object.h" struct pic_fullcont { jmp_buf jmp; struct pic_cont *prev_jmp; - pic_checkpoint *cp; + struct pic_checkpoint *cp; char *stk_pos, *stk_ptr; ptrdiff_t stk_len; @@ -50,7 +51,7 @@ static void cont_mark(pic_state *pic, void *data, void (*mark)(pic_state *, pic_value)) { struct pic_fullcont *cont = data; - pic_checkpoint *cp; + struct pic_checkpoint *cp; pic_value *stack; pic_callinfo *ci; struct pic_proc **xp; diff --git a/extlib/benz/cont.c b/extlib/benz/cont.c index 755b02e7..ffe7e4d2 100644 --- a/extlib/benz/cont.c +++ b/extlib/benz/cont.c @@ -41,7 +41,7 @@ pic_load_point(pic_state *pic, struct pic_cont *cont) } void -pic_wind(pic_state *pic, pic_checkpoint *here, pic_checkpoint *there) +pic_wind(pic_state *pic, struct pic_checkpoint *here, struct pic_checkpoint *there) { if (here == there) return; @@ -59,13 +59,13 @@ pic_wind(pic_state *pic, pic_checkpoint *here, pic_checkpoint *there) static pic_value pic_dynamic_wind(pic_state *pic, pic_value in, pic_value thunk, pic_value out) { - pic_checkpoint *here; + struct pic_checkpoint *here; pic_value val; pic_call(pic, in, 0); /* enter */ here = pic->cp; - pic->cp = (pic_checkpoint *)pic_obj_alloc(pic, sizeof(pic_checkpoint), PIC_TYPE_CP); + pic->cp = (struct pic_checkpoint *)pic_obj_alloc(pic, sizeof(struct pic_checkpoint), PIC_TYPE_CP); pic->cp->prev = here; pic->cp->depth = here->depth + 1; pic->cp->in = pic_proc_ptr(pic, in); diff --git a/extlib/benz/include/picrin.h b/extlib/benz/include/picrin.h index 51b0c8f5..d650f8db 100644 --- a/extlib/benz/include/picrin.h +++ b/extlib/benz/include/picrin.h @@ -56,9 +56,6 @@ struct pic_port; struct pic_error; struct pic_env; -typedef struct pic_identifier pic_id; -typedef pic_id pic_sym; - typedef void *(*pic_allocf)(void *userdata, void *ptr, size_t n); pic_state *pic_open(pic_allocf f, void *userdata); @@ -266,6 +263,9 @@ int pic_str_hash(pic_state *, pic_value str); /* extra stuff */ +typedef struct pic_identifier pic_id; +typedef pic_id pic_sym; + #include "picrin/type.h" #include "picrin/state.h" #include "picrin/cont.h" diff --git a/extlib/benz/include/picrin/cont.h b/extlib/benz/include/picrin/cont.h index 46742b0c..8629d6f9 100644 --- a/extlib/benz/include/picrin/cont.h +++ b/extlib/benz/include/picrin/cont.h @@ -14,7 +14,7 @@ struct pic_cont { int id; - pic_checkpoint *cp; + struct pic_checkpoint *cp; ptrdiff_t sp_offset; ptrdiff_t ci_offset; ptrdiff_t xp_offset; @@ -33,7 +33,7 @@ void pic_load_point(pic_state *, struct pic_cont *); pic_value pic_make_cont(pic_state *, struct pic_cont *); -void pic_wind(pic_state *, pic_checkpoint *, pic_checkpoint *); +void pic_wind(pic_state *, struct pic_checkpoint *, struct pic_checkpoint *); #if defined(__cplusplus) } diff --git a/extlib/benz/include/picrin/object.h b/extlib/benz/include/picrin/object.h index b0fd490b..b9861401 100644 --- a/extlib/benz/include/picrin/object.h +++ b/extlib/benz/include/picrin/object.h @@ -13,6 +13,14 @@ KHASH_DECLARE(env, pic_id *, pic_sym *) KHASH_DECLARE(dict, pic_sym *, pic_value) KHASH_DECLARE(weak, struct pic_object *, pic_value) +#define PIC_OBJECT_HEADER \ + unsigned char tt; \ + char gc_mark; + +struct pic_basic { + PIC_OBJECT_HEADER +}; + struct pic_identifier { PIC_OBJECT_HEADER union { @@ -115,6 +123,14 @@ struct pic_port { xFILE *file; }; +struct pic_checkpoint { + PIC_OBJECT_HEADER + struct pic_proc *in; + struct pic_proc *out; + int depth; + struct pic_checkpoint *prev; +}; + #define pic_id_ptr(pic, o) ((pic_id *)pic_obj_ptr(o)) #define pic_sym_ptr(pic, o) ((pic_sym *)pic_obj_ptr(o)) #define pic_str_ptr(pic, o) ((struct pic_string *)pic_obj_ptr(o)) @@ -131,6 +147,7 @@ struct pic_port { #define pic_port_ptr(v) ((struct pic_port *)pic_obj_ptr(v)) #define pic_env_ptr(v) ((struct pic_env *)pic_obj_ptr(v)) +#define pic_obj_p(pic,v) (pic_vtype(pic,v) == PIC_IVAL_END) #define pic_env_p(pic, v) (pic_type(pic, v) == PIC_TYPE_ENV) #define pic_error_p(pic, v) (pic_type(pic, v) == PIC_TYPE_ERROR) #define pic_rec_p(pic, v) (pic_type(pic, v) == PIC_TYPE_RECORD) diff --git a/extlib/benz/include/picrin/state.h b/extlib/benz/include/picrin/state.h index a3e9ce88..a6db373d 100644 --- a/extlib/benz/include/picrin/state.h +++ b/extlib/benz/include/picrin/state.h @@ -22,14 +22,6 @@ struct pic_lib { struct pic_dict *exports; }; -typedef struct pic_checkpoint { - PIC_OBJECT_HEADER - struct pic_proc *in; - struct pic_proc *out; - int depth; - struct pic_checkpoint *prev; -} pic_checkpoint; - typedef struct { int argc, retc; pic_code *ip; @@ -48,7 +40,7 @@ struct pic_state { pic_allocf allocf; void *userdata; - pic_checkpoint *cp; + struct pic_checkpoint *cp; struct pic_cont *cc; int ccnt; diff --git a/extlib/benz/include/picrin/type.h b/extlib/benz/include/picrin/type.h index 0f03314e..53543933 100644 --- a/extlib/benz/include/picrin/type.h +++ b/extlib/benz/include/picrin/type.h @@ -14,6 +14,8 @@ extern "C" { * it is only used for repsenting internal special state */ +#define pic_invalid_p(pic, v) (pic_vtype(pic, v) == PIC_TYPE_INVALID) + #if PIC_NAN_BOXING /** @@ -96,19 +98,6 @@ pic_obj_ptr(pic_value v) #endif -#define PIC_OBJECT_HEADER \ - unsigned char tt; \ - char gc_mark; - -struct pic_basic { - PIC_OBJECT_HEADER -}; - -#define pic_obj_p(pic,v) (pic_vtype(pic,v) == PIC_IVAL_END) -#define pic_invalid_p(pic, v) (pic_vtype(pic, v) == PIC_TYPE_INVALID) - -#define pic_test(pic, v) (! pic_false_p(pic, v)) - PIC_INLINE bool pic_valid_int(double v) { diff --git a/extlib/benz/pair.c b/extlib/benz/pair.c index a4856687..ec95a029 100644 --- a/extlib/benz/pair.c +++ b/extlib/benz/pair.c @@ -571,7 +571,7 @@ pic_pair_member(pic_state *pic) if (pic_equal_p(pic, key, pic_car(pic, list))) return list; } else { - if (pic_test(pic, pic_call(pic, proc, 2, key, pic_car(pic, list)))) + if (! pic_false_p(pic, pic_call(pic, proc, 2, key, pic_car(pic, list)))) return list; } list = pic_cdr(pic, list); @@ -627,7 +627,7 @@ pic_pair_assoc(pic_state *pic) if (pic_equal_p(pic, key, pic_car(pic, cell))) return cell; } else { - if (pic_test(pic, pic_call(pic, proc, 2, key, pic_car(pic, cell)))) + if (! pic_false_p(pic, pic_call(pic, proc, 2, key, pic_car(pic, cell)))) return cell; } alist = pic_cdr(pic, alist); diff --git a/extlib/benz/state.c b/extlib/benz/state.c index 6e41150a..987d80ab 100644 --- a/extlib/benz/state.c +++ b/extlib/benz/state.c @@ -344,7 +344,7 @@ pic_open(pic_allocf allocf, void *userdata) pic->macros = pic_make_weak(pic); /* root block */ - pic->cp = (pic_checkpoint *)pic_obj_alloc(pic, sizeof(pic_checkpoint), PIC_TYPE_CP); + pic->cp = (struct pic_checkpoint *)pic_obj_alloc(pic, sizeof(struct pic_checkpoint), PIC_TYPE_CP); pic->cp->prev = NULL; pic->cp->depth = 0; pic->cp->in = pic->cp->out = NULL; diff --git a/extlib/benz/value.c b/extlib/benz/value.c index e0857dfb..82fcf227 100644 --- a/extlib/benz/value.c +++ b/extlib/benz/value.c @@ -3,6 +3,7 @@ */ #include "picrin.h" +#include "picrin/object.h" int pic_type(pic_state PIC_UNUSED(*pic), pic_value v)