s/pic_winder/pic_checkpoint/g
This commit is contained in:
parent
0c3adf3d65
commit
5def1df320
|
@ -5,7 +5,7 @@ struct pic_fullcont {
|
||||||
|
|
||||||
pic_jmpbuf *prev_jmp;
|
pic_jmpbuf *prev_jmp;
|
||||||
|
|
||||||
struct pic_winder *wind;
|
pic_checkpoint *cp;
|
||||||
|
|
||||||
char *stk_pos, *stk_ptr;
|
char *stk_pos, *stk_ptr;
|
||||||
ptrdiff_t stk_len;
|
ptrdiff_t stk_len;
|
||||||
|
@ -45,19 +45,19 @@ static void
|
||||||
cont_mark(pic_state *pic, void *data, void (*mark)(pic_state *, pic_value))
|
cont_mark(pic_state *pic, void *data, void (*mark)(pic_state *, pic_value))
|
||||||
{
|
{
|
||||||
struct pic_fullcont *cont = data;
|
struct pic_fullcont *cont = data;
|
||||||
struct pic_winder *wind;
|
pic_checkpoint *cp;
|
||||||
pic_value *stack;
|
pic_value *stack;
|
||||||
pic_callinfo *ci;
|
pic_callinfo *ci;
|
||||||
struct pic_proc **xp;
|
struct pic_proc **xp;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
/* winder */
|
/* checkpoint */
|
||||||
for (wind = cont->wind; wind != NULL; wind = wind->prev) {
|
for (cp = cont->cp; cp != NULL; cp = cp->prev) {
|
||||||
if (wind->in) {
|
if (cp->in) {
|
||||||
mark(pic, pic_obj_value(wind->in));
|
mark(pic, pic_obj_value(cp->in));
|
||||||
}
|
}
|
||||||
if (wind->out) {
|
if (cp->out) {
|
||||||
mark(pic, pic_obj_value(wind->out));
|
mark(pic, pic_obj_value(cp->out));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ save_cont(pic_state *pic, struct pic_fullcont **c)
|
||||||
|
|
||||||
cont->prev_jmp = pic->jmp;
|
cont->prev_jmp = pic->jmp;
|
||||||
|
|
||||||
cont->wind = pic->wind;
|
cont->cp = pic->cp;
|
||||||
|
|
||||||
cont->stk_len = native_stack_length(pic, &pos);
|
cont->stk_len = native_stack_length(pic, &pos);
|
||||||
cont->stk_pos = pos;
|
cont->stk_pos = pos;
|
||||||
|
@ -176,7 +176,7 @@ restore_cont(pic_state *pic, struct pic_fullcont *cont)
|
||||||
|
|
||||||
pic->jmp = cont->prev_jmp;
|
pic->jmp = cont->prev_jmp;
|
||||||
|
|
||||||
pic->wind = cont->wind;
|
pic->cp = cont->cp;
|
||||||
|
|
||||||
pic->stbase = pic_realloc(pic, pic->stbase, sizeof(pic_value) * cont->st_len);
|
pic->stbase = pic_realloc(pic, pic->stbase, sizeof(pic_value) * cont->st_len);
|
||||||
memcpy(pic->stbase, cont->st_ptr, sizeof(pic_value) * cont->st_len);
|
memcpy(pic->stbase, cont->st_ptr, sizeof(pic_value) * cont->st_len);
|
||||||
|
@ -220,7 +220,7 @@ cont_call(pic_state *pic)
|
||||||
cont->results = pic_list_by_array(pic, argc, argv);
|
cont->results = pic_list_by_array(pic, argc, argv);
|
||||||
|
|
||||||
/* execute guard handlers */
|
/* execute guard handlers */
|
||||||
pic_wind(pic, pic->wind, cont->wind);
|
pic_wind(pic, pic->cp, cont->cp);
|
||||||
|
|
||||||
restore_cont(pic, cont);
|
restore_cont(pic, cont);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "picrin.h"
|
#include "picrin.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
pic_wind(pic_state *pic, struct pic_winder *here, struct pic_winder *there)
|
pic_wind(pic_state *pic, pic_checkpoint *here, pic_checkpoint *there)
|
||||||
{
|
{
|
||||||
if (here == there)
|
if (here == there)
|
||||||
return;
|
return;
|
||||||
|
@ -23,23 +23,23 @@ pic_wind(pic_state *pic, struct pic_winder *here, struct pic_winder *there)
|
||||||
pic_value
|
pic_value
|
||||||
pic_dynamic_wind(pic_state *pic, struct pic_proc *in, struct pic_proc *thunk, struct pic_proc *out)
|
pic_dynamic_wind(pic_state *pic, struct pic_proc *in, struct pic_proc *thunk, struct pic_proc *out)
|
||||||
{
|
{
|
||||||
struct pic_winder *here;
|
pic_checkpoint *here;
|
||||||
pic_value val;
|
pic_value val;
|
||||||
|
|
||||||
if (in != NULL) {
|
if (in != NULL) {
|
||||||
pic_apply0(pic, in); /* enter */
|
pic_apply0(pic, in); /* enter */
|
||||||
}
|
}
|
||||||
|
|
||||||
here = pic->wind;
|
here = pic->cp;
|
||||||
pic->wind = pic_malloc(pic, sizeof(struct pic_winder));
|
pic->cp = pic_malloc(pic, sizeof(pic_checkpoint));
|
||||||
pic->wind->prev = here;
|
pic->cp->prev = here;
|
||||||
pic->wind->depth = here->depth + 1;
|
pic->cp->depth = here->depth + 1;
|
||||||
pic->wind->in = in;
|
pic->cp->in = in;
|
||||||
pic->wind->out = out;
|
pic->cp->out = out;
|
||||||
|
|
||||||
val = pic_apply0(pic, thunk);
|
val = pic_apply0(pic, thunk);
|
||||||
|
|
||||||
pic->wind = here;
|
pic->cp = here;
|
||||||
|
|
||||||
if (out != NULL) {
|
if (out != NULL) {
|
||||||
pic_apply0(pic, out); /* exit */
|
pic_apply0(pic, out); /* exit */
|
||||||
|
@ -55,7 +55,7 @@ pic_save_point(pic_state *pic, struct pic_cont *cont)
|
||||||
pic->jmp = &cont->jmp;
|
pic->jmp = &cont->jmp;
|
||||||
|
|
||||||
/* save runtime context */
|
/* save runtime context */
|
||||||
cont->wind = pic->wind;
|
cont->cp = pic->cp;
|
||||||
cont->sp_offset = pic->sp - pic->stbase;
|
cont->sp_offset = pic->sp - pic->stbase;
|
||||||
cont->ci_offset = pic->ci - pic->cibase;
|
cont->ci_offset = pic->ci - pic->cibase;
|
||||||
cont->xp_offset = pic->xp - pic->xpbase;
|
cont->xp_offset = pic->xp - pic->xpbase;
|
||||||
|
@ -79,10 +79,10 @@ pic_load_point(pic_state *pic, struct pic_cont *cont)
|
||||||
pic_errorf(pic, "calling dead escape continuation");
|
pic_errorf(pic, "calling dead escape continuation");
|
||||||
}
|
}
|
||||||
|
|
||||||
pic_wind(pic, pic->wind, cont->wind);
|
pic_wind(pic, pic->cp, cont->cp);
|
||||||
|
|
||||||
/* load runtime context */
|
/* load runtime context */
|
||||||
pic->wind = cont->wind;
|
pic->cp = cont->cp;
|
||||||
pic->sp = pic->stbase + cont->sp_offset;
|
pic->sp = pic->stbase + cont->sp_offset;
|
||||||
pic->ci = pic->cibase + cont->ci_offset;
|
pic->ci = pic->cibase + cont->ci_offset;
|
||||||
pic->xp = pic->xpbase + cont->xp_offset;
|
pic->xp = pic->xpbase + cont->xp_offset;
|
||||||
|
|
|
@ -324,16 +324,16 @@ gc_unmark(union header *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gc_mark_winder(pic_state *pic, struct pic_winder *wind)
|
gc_mark_checkpoint(pic_state *pic, pic_checkpoint *cp)
|
||||||
{
|
{
|
||||||
if (wind->prev) {
|
if (cp->prev) {
|
||||||
gc_mark_object(pic, (struct pic_object *)wind->prev);
|
gc_mark_object(pic, (struct pic_object *)cp->prev);
|
||||||
}
|
}
|
||||||
if (wind->in) {
|
if (cp->in) {
|
||||||
gc_mark_object(pic, (struct pic_object *)wind->in);
|
gc_mark_object(pic, (struct pic_object *)cp->in);
|
||||||
}
|
}
|
||||||
if (wind->out) {
|
if (cp->out) {
|
||||||
gc_mark_object(pic, (struct pic_object *)wind->out);
|
gc_mark_object(pic, (struct pic_object *)cp->out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,9 +538,9 @@ gc_mark_phase(pic_state *pic)
|
||||||
xh_entry *it;
|
xh_entry *it;
|
||||||
struct pic_object *obj;
|
struct pic_object *obj;
|
||||||
|
|
||||||
/* winder */
|
/* checkpoint */
|
||||||
if (pic->wind) {
|
if (pic->cp) {
|
||||||
gc_mark_winder(pic, pic->wind);
|
gc_mark_checkpoint(pic, pic->cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* stack */
|
/* stack */
|
||||||
|
|
|
@ -53,12 +53,12 @@ typedef struct pic_jmpbuf {
|
||||||
struct pic_jmpbuf *prev;
|
struct pic_jmpbuf *prev;
|
||||||
} pic_jmpbuf;
|
} pic_jmpbuf;
|
||||||
|
|
||||||
struct pic_winder {
|
typedef struct pic_checkpoint {
|
||||||
struct pic_proc *in;
|
struct pic_proc *in;
|
||||||
struct pic_proc *out;
|
struct pic_proc *out;
|
||||||
int depth;
|
int depth;
|
||||||
struct pic_winder *prev;
|
struct pic_checkpoint *prev;
|
||||||
};
|
} pic_checkpoint;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int argc, retc;
|
int argc, retc;
|
||||||
|
@ -79,7 +79,7 @@ typedef struct {
|
||||||
pic_allocf allocf;
|
pic_allocf allocf;
|
||||||
|
|
||||||
pic_jmpbuf *jmp;
|
pic_jmpbuf *jmp;
|
||||||
struct pic_winder *wind;
|
pic_checkpoint *cp;
|
||||||
|
|
||||||
pic_value *sp;
|
pic_value *sp;
|
||||||
pic_value *stbase, *stend;
|
pic_value *stbase, *stend;
|
||||||
|
|
|
@ -12,7 +12,7 @@ extern "C" {
|
||||||
struct pic_cont {
|
struct pic_cont {
|
||||||
pic_jmpbuf jmp;
|
pic_jmpbuf jmp;
|
||||||
|
|
||||||
struct pic_winder *wind;
|
pic_checkpoint *cp;
|
||||||
|
|
||||||
ptrdiff_t sp_offset;
|
ptrdiff_t sp_offset;
|
||||||
ptrdiff_t ci_offset;
|
ptrdiff_t ci_offset;
|
||||||
|
@ -29,7 +29,7 @@ void pic_load_point(pic_state *, struct pic_cont *);
|
||||||
|
|
||||||
struct pic_proc *pic_make_cont(pic_state *, struct pic_cont *);
|
struct pic_proc *pic_make_cont(pic_state *, struct pic_cont *);
|
||||||
|
|
||||||
void pic_wind(pic_state *, struct pic_winder *, struct pic_winder *);
|
void pic_wind(pic_state *, pic_checkpoint *, pic_checkpoint *);
|
||||||
pic_value pic_dynamic_wind(pic_state *, struct pic_proc *, struct pic_proc *, struct pic_proc *);
|
pic_value pic_dynamic_wind(pic_state *, struct pic_proc *, struct pic_proc *, struct pic_proc *);
|
||||||
|
|
||||||
pic_value pic_values0(pic_state *);
|
pic_value pic_values0(pic_state *);
|
||||||
|
|
|
@ -160,7 +160,7 @@ pic_open(int argc, char *argv[], char **envp, pic_allocf allocf)
|
||||||
pic->jmp = NULL;
|
pic->jmp = NULL;
|
||||||
|
|
||||||
/* root block */
|
/* root block */
|
||||||
pic->wind = NULL;
|
pic->cp = NULL;
|
||||||
|
|
||||||
/* command line */
|
/* command line */
|
||||||
pic->argc = argc;
|
pic->argc = argc;
|
||||||
|
@ -329,10 +329,10 @@ pic_open(int argc, char *argv[], char **envp, pic_allocf allocf)
|
||||||
pic->macros = pic_make_dict(pic);
|
pic->macros = pic_make_dict(pic);
|
||||||
|
|
||||||
/* root block */
|
/* root block */
|
||||||
pic->wind = pic_malloc(pic, sizeof(struct pic_winder));
|
pic->cp = pic_malloc(pic, sizeof(pic_checkpoint));
|
||||||
pic->wind->prev = NULL;
|
pic->cp->prev = NULL;
|
||||||
pic->wind->depth = 0;
|
pic->cp->depth = 0;
|
||||||
pic->wind->in = pic->wind->out = NULL;
|
pic->cp->in = pic->cp->out = NULL;
|
||||||
|
|
||||||
/* reader */
|
/* reader */
|
||||||
pic->reader = pic_reader_open(pic);
|
pic->reader = pic_reader_open(pic);
|
||||||
|
@ -378,11 +378,11 @@ pic_close(pic_state *pic)
|
||||||
pic_allocf allocf = pic->allocf;
|
pic_allocf allocf = pic->allocf;
|
||||||
|
|
||||||
/* invoke exit handlers */
|
/* invoke exit handlers */
|
||||||
while (pic->wind) {
|
while (pic->cp) {
|
||||||
if (pic->wind->out) {
|
if (pic->cp->out) {
|
||||||
pic_apply0(pic, pic->wind->out);
|
pic_apply0(pic, pic->cp->out);
|
||||||
}
|
}
|
||||||
pic->wind = pic->wind->prev;
|
pic->cp = pic->cp->prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free symbol names */
|
/* free symbol names */
|
||||||
|
|
Loading…
Reference in New Issue