From 98bb47dfb685149690b964f7aed7c18e0bace754 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Wed, 16 Jul 2014 10:04:06 +0900 Subject: [PATCH 1/5] remove pic_papply --- include/picrin/proc.h | 2 -- src/proc.c | 30 ------------------------------ 2 files changed, 32 deletions(-) diff --git a/include/picrin/proc.h b/include/picrin/proc.h index 039a4384..e6d9fdbc 100644 --- a/include/picrin/proc.h +++ b/include/picrin/proc.h @@ -59,8 +59,6 @@ int pic_proc_cv_size(pic_state *, struct pic_proc *); pic_value pic_proc_cv_ref(pic_state *, struct pic_proc *, size_t); void pic_proc_cv_set(pic_state *, struct pic_proc *, size_t, pic_value); -struct pic_proc *pic_papply(pic_state *, struct pic_proc *, pic_value); - #if defined(__cplusplus) } #endif diff --git a/src/proc.c b/src/proc.c index cfb9bcbb..c96f0e62 100644 --- a/src/proc.c +++ b/src/proc.c @@ -99,36 +99,6 @@ pic_proc_cv_set(pic_state *pic, struct pic_proc *proc, size_t i, pic_value v) proc->env->regs[i] = v; } -static pic_value -papply_call(pic_state *pic) -{ - size_t argc; - pic_value *argv, arg, arg_list; - struct pic_proc *proc; - - pic_get_args(pic, "*", &argc, &argv); - - proc = pic_proc_ptr(pic_proc_cv_ref(pic, pic_get_proc(pic), 0)); - arg = pic_proc_cv_ref(pic, pic_get_proc(pic), 1); - - arg_list = pic_list_by_array(pic, argc, argv); - arg_list = pic_cons(pic, arg, arg_list); - return pic_apply(pic, proc, arg_list); -} - -struct pic_proc * -pic_papply(pic_state *pic, struct pic_proc *proc, pic_value arg) -{ - struct pic_proc *pa_proc; - - pa_proc = pic_proc_new(pic, papply_call, ""); - pic_proc_cv_init(pic, pa_proc, 2); - pic_proc_cv_set(pic, pa_proc, 0, pic_obj_value(proc)); - pic_proc_cv_set(pic, pa_proc, 1, arg); - - return pa_proc; -} - static pic_value pic_proc_proc_p(pic_state *pic) { From f46114ca034cee7e5088cb5b36628d8f09878792 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Wed, 16 Jul 2014 10:08:58 +0900 Subject: [PATCH 2/5] [experimental] use attributes for cv implementation --- src/proc.c | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/src/proc.c b/src/proc.c index c96f0e62..d7f391b0 100644 --- a/src/proc.c +++ b/src/proc.c @@ -61,42 +61,24 @@ pic_proc_attr(pic_state *pic, struct pic_proc *proc) void pic_proc_cv_init(pic_state *pic, struct pic_proc *proc, size_t cv_size) { - struct pic_env *env; - - if (proc->env != NULL) { - pic_error(pic, "env slot already in use"); - } - env = (struct pic_env *)pic_obj_alloc(pic, sizeof(struct pic_env), PIC_TT_ENV); - env->regc = cv_size; - env->regs = (pic_value *)pic_calloc(pic, cv_size, sizeof(pic_value)); - env->up = NULL; - - proc->env = env; } int pic_proc_cv_size(pic_state *pic, struct pic_proc *proc) { - UNUSED(pic); - return proc->env ? proc->env->regc : 0; + return 0; } pic_value pic_proc_cv_ref(pic_state *pic, struct pic_proc *proc, size_t i) { - if (proc->env == NULL) { - pic_error(pic, "no closed env"); - } - return proc->env->regs[i]; + return pic_dict_ref(pic, pic_proc_attr(pic, proc), i); /* FIXME */ } void pic_proc_cv_set(pic_state *pic, struct pic_proc *proc, size_t i, pic_value v) { - if (proc->env == NULL) { - pic_error(pic, "no closed env"); - } - proc->env->regs[i] = v; + pic_dict_set(pic, pic_proc_attr(pic, proc), i, v); /* FIXME */ } static pic_value From cb3c4e8e22bad715552662993cf8ced11b2da478 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Wed, 16 Jul 2014 10:13:18 +0900 Subject: [PATCH 3/5] remove use of pic_proc_cv_init --- include/picrin/proc.h | 2 -- src/cont.c | 2 -- src/proc.c | 11 ----------- 3 files changed, 15 deletions(-) diff --git a/include/picrin/proc.h b/include/picrin/proc.h index e6d9fdbc..d72ddc04 100644 --- a/include/picrin/proc.h +++ b/include/picrin/proc.h @@ -54,8 +54,6 @@ pic_sym pic_proc_name(struct pic_proc *); struct pic_dict *pic_proc_attr(pic_state *, struct pic_proc *); /* closed variables accessor */ -void pic_proc_cv_init(pic_state *, struct pic_proc *, size_t); -int pic_proc_cv_size(pic_state *, struct pic_proc *); pic_value pic_proc_cv_ref(pic_state *, struct pic_proc *, size_t); void pic_proc_cv_set(pic_state *, struct pic_proc *, size_t, pic_value); diff --git a/src/cont.c b/src/cont.c index f84e55c7..f76a6695 100644 --- a/src/cont.c +++ b/src/cont.c @@ -245,7 +245,6 @@ pic_callcc(pic_state *pic, struct pic_proc *proc) c = pic_proc_new(pic, cont_call, ""); /* save the continuation object in proc */ - pic_proc_cv_init(pic, c, 1); pic_proc_cv_set(pic, c, 0, pic_obj_value(cont)); return pic_apply1(pic, proc, pic_obj_value(c)); @@ -267,7 +266,6 @@ pic_callcc_trampoline(pic_state *pic, struct pic_proc *proc) c = pic_proc_new(pic, cont_call, ""); /* save the continuation object in proc */ - pic_proc_cv_init(pic, c, 1); pic_proc_cv_set(pic, c, 0, pic_obj_value(cont)); return pic_apply_trampoline(pic, proc, pic_list1(pic, pic_obj_value(c))); diff --git a/src/proc.c b/src/proc.c index d7f391b0..bd11bcf4 100644 --- a/src/proc.c +++ b/src/proc.c @@ -58,17 +58,6 @@ pic_proc_attr(pic_state *pic, struct pic_proc *proc) return proc->attr; } -void -pic_proc_cv_init(pic_state *pic, struct pic_proc *proc, size_t cv_size) -{ -} - -int -pic_proc_cv_size(pic_state *pic, struct pic_proc *proc) -{ - return 0; -} - pic_value pic_proc_cv_ref(pic_state *pic, struct pic_proc *proc, size_t i) { From 4714df48f0712c251aedd1b9099f1eaf76d73b3f Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Thu, 17 Jul 2014 16:28:36 +0900 Subject: [PATCH 4/5] s/pic_proc_attr/pic_attr/g --- include/picrin/proc.h | 2 +- src/proc.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/picrin/proc.h b/include/picrin/proc.h index d72ddc04..40dfc46c 100644 --- a/include/picrin/proc.h +++ b/include/picrin/proc.h @@ -51,7 +51,7 @@ struct pic_proc *pic_proc_new_irep(pic_state *, struct pic_irep *, struct pic_en pic_sym pic_proc_name(struct pic_proc *); -struct pic_dict *pic_proc_attr(pic_state *, struct pic_proc *); +struct pic_dict *pic_attr(pic_state *, struct pic_proc *); /* closed variables accessor */ pic_value pic_proc_cv_ref(pic_state *, struct pic_proc *, size_t); diff --git a/src/proc.c b/src/proc.c index bd11bcf4..e3694a25 100644 --- a/src/proc.c +++ b/src/proc.c @@ -50,7 +50,7 @@ pic_proc_name(struct pic_proc *proc) } struct pic_dict * -pic_proc_attr(pic_state *pic, struct pic_proc *proc) +pic_attr(pic_state *pic, struct pic_proc *proc) { if (proc->attr == NULL) { proc->attr = pic_dict_new(pic); @@ -61,13 +61,13 @@ pic_proc_attr(pic_state *pic, struct pic_proc *proc) pic_value pic_proc_cv_ref(pic_state *pic, struct pic_proc *proc, size_t i) { - return pic_dict_ref(pic, pic_proc_attr(pic, proc), i); /* FIXME */ + return pic_dict_ref(pic, pic_attr(pic, proc), i); /* FIXME */ } void pic_proc_cv_set(pic_state *pic, struct pic_proc *proc, size_t i, pic_value v) { - pic_dict_set(pic, pic_proc_attr(pic, proc), i, v); /* FIXME */ + pic_dict_set(pic, pic_attr(pic, proc), i, v); /* FIXME */ } static pic_value @@ -166,7 +166,7 @@ pic_proc_attribute(pic_state *pic) pic_get_args(pic, "l", &proc); - return pic_obj_value(pic_proc_attr(pic, proc)); + return pic_obj_value(pic_attr(pic, proc)); } void From c601dbf27e50514a5ec51ef95e1cfb3781e08575 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Thu, 17 Jul 2014 16:31:26 +0900 Subject: [PATCH 5/5] rename pic_proc_cv_ref to pic_attr_ref --- include/picrin/proc.h | 6 ++---- src/cont.c | 6 +++--- src/proc.c | 8 ++++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/include/picrin/proc.h b/include/picrin/proc.h index 40dfc46c..b91960de 100644 --- a/include/picrin/proc.h +++ b/include/picrin/proc.h @@ -52,10 +52,8 @@ struct pic_proc *pic_proc_new_irep(pic_state *, struct pic_irep *, struct pic_en pic_sym pic_proc_name(struct pic_proc *); struct pic_dict *pic_attr(pic_state *, struct pic_proc *); - -/* closed variables accessor */ -pic_value pic_proc_cv_ref(pic_state *, struct pic_proc *, size_t); -void pic_proc_cv_set(pic_state *, struct pic_proc *, size_t, pic_value); +pic_value pic_attr_ref(pic_state *, struct pic_proc *, const char *); +void pic_attr_set(pic_state *, struct pic_proc *, const char *, pic_value); #if defined(__cplusplus) } diff --git a/src/cont.c b/src/cont.c index f76a6695..de076874 100644 --- a/src/cont.c +++ b/src/cont.c @@ -221,7 +221,7 @@ cont_call(pic_state *pic) proc = pic_get_proc(pic); pic_get_args(pic, "*", &argc, &argv); - cont = (struct pic_cont *)pic_ptr(pic_proc_cv_ref(pic, proc, 0)); + cont = (struct pic_cont *)pic_ptr(pic_attr_ref(pic, proc, "@@cont")); cont->results = pic_list_by_array(pic, argc, argv); /* execute guard handlers */ @@ -245,7 +245,7 @@ pic_callcc(pic_state *pic, struct pic_proc *proc) c = pic_proc_new(pic, cont_call, ""); /* save the continuation object in proc */ - pic_proc_cv_set(pic, c, 0, pic_obj_value(cont)); + pic_attr_set(pic, c, "@@cont", pic_obj_value(cont)); return pic_apply1(pic, proc, pic_obj_value(c)); } @@ -266,7 +266,7 @@ pic_callcc_trampoline(pic_state *pic, struct pic_proc *proc) c = pic_proc_new(pic, cont_call, ""); /* save the continuation object in proc */ - pic_proc_cv_set(pic, c, 0, pic_obj_value(cont)); + pic_attr_set(pic, c, "@@cont", pic_obj_value(cont)); return pic_apply_trampoline(pic, proc, pic_list1(pic, pic_obj_value(c))); } diff --git a/src/proc.c b/src/proc.c index e3694a25..84967224 100644 --- a/src/proc.c +++ b/src/proc.c @@ -59,15 +59,15 @@ pic_attr(pic_state *pic, struct pic_proc *proc) } pic_value -pic_proc_cv_ref(pic_state *pic, struct pic_proc *proc, size_t i) +pic_attr_ref(pic_state *pic, struct pic_proc *proc, const char *key) { - return pic_dict_ref(pic, pic_attr(pic, proc), i); /* FIXME */ + return pic_dict_ref(pic, pic_attr(pic, proc), pic_intern_cstr(pic, key)); } void -pic_proc_cv_set(pic_state *pic, struct pic_proc *proc, size_t i, pic_value v) +pic_attr_set(pic_state *pic, struct pic_proc *proc, const char *key, pic_value v) { - pic_dict_set(pic, pic_attr(pic, proc), i, v); /* FIXME */ + pic_dict_set(pic, pic_attr(pic, proc), pic_intern_cstr(pic, key), v); } static pic_value