pic_callinfo -> struct pic_callinfo, pic_code -> struct pic_code
This commit is contained in:
parent
5c7c5a69cf
commit
684eb6502d
|
@ -16,7 +16,7 @@ struct pic_fullcont {
|
||||||
size_t sp_offset;
|
size_t sp_offset;
|
||||||
ptrdiff_t st_len;
|
ptrdiff_t st_len;
|
||||||
|
|
||||||
pic_callinfo *ci_ptr;
|
struct pic_callinfo *ci_ptr;
|
||||||
size_t ci_offset;
|
size_t ci_offset;
|
||||||
ptrdiff_t ci_len;
|
ptrdiff_t ci_len;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ struct pic_fullcont {
|
||||||
size_t xp_offset;
|
size_t xp_offset;
|
||||||
ptrdiff_t xp_len;
|
ptrdiff_t xp_len;
|
||||||
|
|
||||||
pic_code *ip;
|
struct pic_code *ip;
|
||||||
|
|
||||||
pic_value ptable;
|
pic_value ptable;
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ 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_checkpoint *cp;
|
struct pic_checkpoint *cp;
|
||||||
pic_value *stack;
|
pic_value *stack;
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
struct pic_proc **xp;
|
struct pic_proc **xp;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
@ -141,8 +141,8 @@ save_cont(pic_state *pic, struct pic_fullcont **c)
|
||||||
|
|
||||||
cont->ci_offset = pic->ci - pic->cibase;
|
cont->ci_offset = pic->ci - pic->cibase;
|
||||||
cont->ci_len = pic->ciend - pic->cibase;
|
cont->ci_len = pic->ciend - pic->cibase;
|
||||||
cont->ci_ptr = pic_malloc(pic, sizeof(pic_callinfo) * cont->ci_len);
|
cont->ci_ptr = pic_malloc(pic, sizeof(struct pic_callinfo) * cont->ci_len);
|
||||||
memcpy(cont->ci_ptr, pic->cibase, sizeof(pic_callinfo) * cont->ci_len);
|
memcpy(cont->ci_ptr, pic->cibase, sizeof(struct pic_callinfo) * cont->ci_len);
|
||||||
|
|
||||||
cont->xp_offset = pic->xp - pic->xpbase;
|
cont->xp_offset = pic->xp - pic->xpbase;
|
||||||
cont->xp_len = pic->xpend - pic->xpbase;
|
cont->xp_len = pic->xpend - pic->xpbase;
|
||||||
|
@ -193,7 +193,7 @@ restore_cont(pic_state *pic, struct pic_fullcont *cont)
|
||||||
pic->stend = pic->stbase + cont->st_len;
|
pic->stend = pic->stbase + cont->st_len;
|
||||||
|
|
||||||
assert(pic->ciend - pic->cibase >= cont->ci_len);
|
assert(pic->ciend - pic->cibase >= cont->ci_len);
|
||||||
memcpy(pic->cibase, cont->ci_ptr, sizeof(pic_callinfo) * cont->ci_len);
|
memcpy(pic->cibase, cont->ci_ptr, sizeof(struct pic_callinfo) * cont->ci_len);
|
||||||
pic->ci = pic->cibase + cont->ci_offset;
|
pic->ci = pic->cibase + cont->ci_offset;
|
||||||
pic->ciend = pic->cibase + cont->ci_len;
|
pic->ciend = pic->cibase + cont->ci_len;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ struct pic_cont {
|
||||||
ptrdiff_t xp_offset;
|
ptrdiff_t xp_offset;
|
||||||
size_t arena_idx;
|
size_t arena_idx;
|
||||||
pic_value ptable;
|
pic_value ptable;
|
||||||
pic_code *ip;
|
struct pic_code *ip;
|
||||||
|
|
||||||
int retc;
|
int retc;
|
||||||
pic_value *retv;
|
pic_value *retv;
|
||||||
|
@ -218,7 +218,7 @@ pic_valuesk(pic_state *pic, int argc, pic_value *argv)
|
||||||
int
|
int
|
||||||
pic_receive(pic_state *pic, int n, pic_value *argv)
|
pic_receive(pic_state *pic, int n, pic_value *argv)
|
||||||
{
|
{
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
int i, retc;
|
int i, retc;
|
||||||
|
|
||||||
/* take info from discarded frame */
|
/* take info from discarded frame */
|
||||||
|
|
|
@ -11,7 +11,7 @@ pic_value
|
||||||
pic_get_backtrace(pic_state *pic)
|
pic_get_backtrace(pic_state *pic)
|
||||||
{
|
{
|
||||||
size_t ai = pic_enter(pic);
|
size_t ai = pic_enter(pic);
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
pic_value trace;
|
pic_value trace;
|
||||||
|
|
||||||
trace = pic_lit_value(pic, "");
|
trace = pic_lit_value(pic, "");
|
||||||
|
|
|
@ -354,7 +354,7 @@ typedef struct codegen_context {
|
||||||
pic_value rest;
|
pic_value rest;
|
||||||
pic_value args, locals, captures;
|
pic_value args, locals, captures;
|
||||||
/* actual bit code sequence */
|
/* actual bit code sequence */
|
||||||
pic_code *code;
|
struct pic_code *code;
|
||||||
size_t clen, ccapa;
|
size_t clen, ccapa;
|
||||||
/* child ireps */
|
/* child ireps */
|
||||||
struct pic_irep **irep;
|
struct pic_irep **irep;
|
||||||
|
@ -382,7 +382,7 @@ codegen_context_init(pic_state *pic, codegen_context *cxt, codegen_context *up,
|
||||||
cxt->locals = locals;
|
cxt->locals = locals;
|
||||||
cxt->captures = captures;
|
cxt->captures = captures;
|
||||||
|
|
||||||
cxt->code = pic_calloc(pic, PIC_ISEQ_SIZE, sizeof(pic_code));
|
cxt->code = pic_calloc(pic, PIC_ISEQ_SIZE, sizeof(struct pic_code));
|
||||||
cxt->clen = 0;
|
cxt->clen = 0;
|
||||||
cxt->ccapa = PIC_ISEQ_SIZE;
|
cxt->ccapa = PIC_ISEQ_SIZE;
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ codegen_context_destroy(pic_state *pic, codegen_context *cxt)
|
||||||
irep->argc = pic_vec_len(pic, cxt->args) + 1;
|
irep->argc = pic_vec_len(pic, cxt->args) + 1;
|
||||||
irep->localc = pic_vec_len(pic, cxt->locals);
|
irep->localc = pic_vec_len(pic, cxt->locals);
|
||||||
irep->capturec = pic_vec_len(pic, cxt->captures);
|
irep->capturec = pic_vec_len(pic, cxt->captures);
|
||||||
irep->code = pic_realloc(pic, cxt->code, sizeof(pic_code) * cxt->clen);
|
irep->code = pic_realloc(pic, cxt->code, sizeof(struct pic_code) * cxt->clen);
|
||||||
irep->irep = pic_realloc(pic, cxt->irep, sizeof(struct pic_irep *) * cxt->ilen);
|
irep->irep = pic_realloc(pic, cxt->irep, sizeof(struct pic_irep *) * cxt->ilen);
|
||||||
irep->ints = pic_realloc(pic, cxt->ints, sizeof(int) * cxt->klen);
|
irep->ints = pic_realloc(pic, cxt->ints, sizeof(int) * cxt->klen);
|
||||||
irep->nums = pic_realloc(pic, cxt->nums, sizeof(double) * cxt->flen);
|
irep->nums = pic_realloc(pic, cxt->nums, sizeof(double) * cxt->flen);
|
||||||
|
@ -443,7 +443,7 @@ codegen_context_destroy(pic_state *pic, codegen_context *cxt)
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define check_code_size(pic, cxt) check_size(pic, cxt, c, code, pic_code)
|
#define check_code_size(pic, cxt) check_size(pic, cxt, c, code, struct pic_code)
|
||||||
#define check_irep_size(pic, cxt) check_size(pic, cxt, i, irep, struct pic_irep *)
|
#define check_irep_size(pic, cxt) check_size(pic, cxt, i, irep, struct pic_irep *)
|
||||||
#define check_pool_size(pic, cxt) check_size(pic, cxt, p, pool, struct pic_object *)
|
#define check_pool_size(pic, cxt) check_size(pic, cxt, p, pool, struct pic_object *)
|
||||||
#define check_ints_size(pic, cxt) check_size(pic, cxt, k, ints, int)
|
#define check_ints_size(pic, cxt) check_size(pic, cxt, k, ints, int)
|
||||||
|
|
|
@ -412,9 +412,9 @@ static void
|
||||||
gc_mark_phase(pic_state *pic)
|
gc_mark_phase(pic_state *pic)
|
||||||
{
|
{
|
||||||
pic_value *stack;
|
pic_value *stack;
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
struct pic_proc **xhandler;
|
struct pic_proc **xhandler;
|
||||||
struct pic_list *list;
|
struct pic_list_head *list;
|
||||||
int it;
|
int it;
|
||||||
size_t j;
|
size_t j;
|
||||||
|
|
||||||
|
|
|
@ -21,16 +21,16 @@ struct pic_lib {
|
||||||
struct pic_dict *exports;
|
struct pic_dict *exports;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
struct pic_callinfo {
|
||||||
int argc, retc;
|
int argc, retc;
|
||||||
pic_code *ip;
|
struct pic_code *ip;
|
||||||
pic_value *fp;
|
pic_value *fp;
|
||||||
struct pic_irep *irep;
|
struct pic_irep *irep;
|
||||||
struct pic_context *cxt;
|
struct pic_context *cxt;
|
||||||
int regc;
|
int regc;
|
||||||
pic_value *regs;
|
pic_value *regs;
|
||||||
struct pic_context *up;
|
struct pic_context *up;
|
||||||
} pic_callinfo;
|
};
|
||||||
|
|
||||||
KHASH_DECLARE(oblist, struct pic_string *, struct pic_identifier *)
|
KHASH_DECLARE(oblist, struct pic_string *, struct pic_identifier *)
|
||||||
KHASH_DECLARE(ltable, const char *, struct pic_lib)
|
KHASH_DECLARE(ltable, const char *, struct pic_lib)
|
||||||
|
@ -46,13 +46,13 @@ struct pic_state {
|
||||||
pic_value *sp;
|
pic_value *sp;
|
||||||
pic_value *stbase, *stend;
|
pic_value *stbase, *stend;
|
||||||
|
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
pic_callinfo *cibase, *ciend;
|
struct pic_callinfo *cibase, *ciend;
|
||||||
|
|
||||||
struct pic_proc **xp;
|
struct pic_proc **xp;
|
||||||
struct pic_proc **xpbase, **xpend;
|
struct pic_proc **xpbase, **xpend;
|
||||||
|
|
||||||
pic_code *ip;
|
struct pic_code *ip;
|
||||||
|
|
||||||
pic_value ptable; /* list of ephemerons */
|
pic_value ptable; /* list of ephemerons */
|
||||||
|
|
||||||
|
@ -65,10 +65,10 @@ struct pic_state {
|
||||||
pic_value globals; /* weak */
|
pic_value globals; /* weak */
|
||||||
pic_value macros; /* weak */
|
pic_value macros; /* weak */
|
||||||
khash_t(ltable) ltable;
|
khash_t(ltable) ltable;
|
||||||
struct pic_list ireps; /* chain */
|
struct pic_list_head ireps; /* chain */
|
||||||
|
|
||||||
xFILE files[XOPEN_MAX];
|
xFILE files[XOPEN_MAX];
|
||||||
pic_code iseq[2]; /* for pic_apply_trampoline */
|
struct pic_code iseq[2]; /* for pic_apply_trampoline */
|
||||||
|
|
||||||
bool gc_enable;
|
bool gc_enable;
|
||||||
struct pic_heap *heap;
|
struct pic_heap *heap;
|
||||||
|
|
|
@ -52,22 +52,22 @@ enum {
|
||||||
OP_STOP
|
OP_STOP
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
struct pic_code {
|
||||||
int insn;
|
int insn;
|
||||||
int a;
|
int a;
|
||||||
int b;
|
int b;
|
||||||
} pic_code;
|
};
|
||||||
|
|
||||||
struct pic_list {
|
struct pic_list_head {
|
||||||
struct pic_list *prev, *next;
|
struct pic_list_head *prev, *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pic_irep {
|
struct pic_irep {
|
||||||
struct pic_list list;
|
struct pic_list_head list;
|
||||||
unsigned refc;
|
unsigned refc;
|
||||||
int argc, localc, capturec;
|
int argc, localc, capturec;
|
||||||
bool varg;
|
bool varg;
|
||||||
pic_code *code;
|
struct pic_code *code;
|
||||||
struct pic_irep **irep;
|
struct pic_irep **irep;
|
||||||
int *ints;
|
int *ints;
|
||||||
double *nums;
|
double *nums;
|
||||||
|
|
|
@ -253,7 +253,7 @@ vm_gset(pic_state *pic, pic_value uid, pic_value value)
|
||||||
static void
|
static void
|
||||||
vm_push_cxt(pic_state *pic)
|
vm_push_cxt(pic_state *pic)
|
||||||
{
|
{
|
||||||
pic_callinfo *ci = pic->ci;
|
struct pic_callinfo *ci = pic->ci;
|
||||||
|
|
||||||
ci->cxt = (struct pic_context *)pic_obj_alloc(pic, offsetof(struct pic_context, storage) + sizeof(pic_value) * ci->regc, PIC_TYPE_CXT);
|
ci->cxt = (struct pic_context *)pic_obj_alloc(pic, offsetof(struct pic_context, storage) + sizeof(pic_value) * ci->regc, PIC_TYPE_CXT);
|
||||||
ci->cxt->up = ci->up;
|
ci->cxt->up = ci->up;
|
||||||
|
@ -262,7 +262,7 @@ vm_push_cxt(pic_state *pic)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vm_tear_off(pic_callinfo *ci)
|
vm_tear_off(struct pic_callinfo *ci)
|
||||||
{
|
{
|
||||||
struct pic_context *cxt;
|
struct pic_context *cxt;
|
||||||
int i;
|
int i;
|
||||||
|
@ -283,7 +283,7 @@ vm_tear_off(pic_callinfo *ci)
|
||||||
void
|
void
|
||||||
pic_vm_tear_off(pic_state *pic)
|
pic_vm_tear_off(pic_state *pic)
|
||||||
{
|
{
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
|
|
||||||
for (ci = pic->ci; ci > pic->cibase; ci--) {
|
for (ci = pic->ci; ci > pic->cibase; ci--) {
|
||||||
if (ci->cxt != NULL) {
|
if (ci->cxt != NULL) {
|
||||||
|
@ -326,9 +326,9 @@ bool pic_ge(pic_state *, pic_value, pic_value);
|
||||||
pic_value
|
pic_value
|
||||||
pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
|
pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
|
||||||
{
|
{
|
||||||
pic_code c;
|
struct pic_code c;
|
||||||
size_t ai = pic_enter(pic);
|
size_t ai = pic_enter(pic);
|
||||||
pic_code boot[2];
|
struct pic_code boot[2];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#if PIC_DIRECT_THREADED_VM
|
#if PIC_DIRECT_THREADED_VM
|
||||||
|
@ -411,7 +411,7 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
CASE(OP_LREF) {
|
CASE(OP_LREF) {
|
||||||
pic_callinfo *ci = pic->ci;
|
struct pic_callinfo *ci = pic->ci;
|
||||||
struct pic_irep *irep = ci->irep;
|
struct pic_irep *irep = ci->irep;
|
||||||
|
|
||||||
if (ci->cxt != NULL && ci->cxt->regs == ci->cxt->storage) {
|
if (ci->cxt != NULL && ci->cxt->regs == ci->cxt->storage) {
|
||||||
|
@ -424,7 +424,7 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
CASE(OP_LSET) {
|
CASE(OP_LSET) {
|
||||||
pic_callinfo *ci = pic->ci;
|
struct pic_callinfo *ci = pic->ci;
|
||||||
struct pic_irep *irep = ci->irep;
|
struct pic_irep *irep = ci->irep;
|
||||||
|
|
||||||
if (ci->cxt != NULL && ci->cxt->regs == ci->cxt->storage) {
|
if (ci->cxt != NULL && ci->cxt->regs == ci->cxt->storage) {
|
||||||
|
@ -477,7 +477,7 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
|
||||||
}
|
}
|
||||||
CASE(OP_CALL) {
|
CASE(OP_CALL) {
|
||||||
pic_value x, v;
|
pic_value x, v;
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
struct pic_proc *proc;
|
struct pic_proc *proc;
|
||||||
|
|
||||||
if (c.a == -1) {
|
if (c.a == -1) {
|
||||||
|
@ -557,7 +557,7 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
|
||||||
CASE(OP_TAILCALL) {
|
CASE(OP_TAILCALL) {
|
||||||
int i, argc;
|
int i, argc;
|
||||||
pic_value *argv;
|
pic_value *argv;
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
|
|
||||||
if (pic->ci->cxt != NULL) {
|
if (pic->ci->cxt != NULL) {
|
||||||
vm_tear_off(pic->ci);
|
vm_tear_off(pic->ci);
|
||||||
|
@ -583,7 +583,7 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv)
|
||||||
CASE(OP_RET) {
|
CASE(OP_RET) {
|
||||||
int i, retc;
|
int i, retc;
|
||||||
pic_value *retv;
|
pic_value *retv;
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
|
|
||||||
if (pic->ci->cxt != NULL) {
|
if (pic->ci->cxt != NULL) {
|
||||||
vm_tear_off(pic->ci);
|
vm_tear_off(pic->ci);
|
||||||
|
@ -772,7 +772,7 @@ pic_value
|
||||||
pic_applyk(pic_state *pic, pic_value proc, int argc, pic_value *args)
|
pic_applyk(pic_state *pic, pic_value proc, int argc, pic_value *args)
|
||||||
{
|
{
|
||||||
pic_value *sp;
|
pic_value *sp;
|
||||||
pic_callinfo *ci;
|
struct pic_callinfo *ci;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
pic->iseq[0].insn = OP_NOP;
|
pic->iseq[0].insn = OP_NOP;
|
||||||
|
|
|
@ -219,7 +219,7 @@ pic_open(pic_allocf allocf, void *userdata)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callinfo */
|
/* callinfo */
|
||||||
pic->cibase = pic->ci = allocf(userdata, NULL, PIC_STACK_SIZE * sizeof(pic_callinfo));
|
pic->cibase = pic->ci = allocf(userdata, NULL, PIC_STACK_SIZE * sizeof(struct pic_callinfo));
|
||||||
pic->ciend = pic->cibase + PIC_STACK_SIZE;
|
pic->ciend = pic->cibase + PIC_STACK_SIZE;
|
||||||
|
|
||||||
if (! pic->ci) {
|
if (! pic->ci) {
|
||||||
|
@ -356,7 +356,7 @@ pic_close(pic_state *pic)
|
||||||
{
|
{
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct pic_list *list;
|
struct pic_list_head *list;
|
||||||
for (list = pic->ireps.next; list != &pic->ireps; list = list->next) {
|
for (list = pic->ireps.next; list != &pic->ireps; list = list->next) {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue