don't use static non-const local variable
This commit is contained in:
parent
5b87706af1
commit
6af60c9e2b
|
@ -760,9 +760,9 @@ static void
|
||||||
gc_sweep_page(pic_state *pic, struct heap_page *page)
|
gc_sweep_page(pic_state *pic, struct heap_page *page)
|
||||||
{
|
{
|
||||||
#if GC_DEBUG
|
#if GC_DEBUG
|
||||||
static union header *NIL = (union header *)0xdeadbeef;
|
static union header * const NIL = (union header *)0xdeadbeef;
|
||||||
#else
|
#else
|
||||||
static union header *NIL = NULL;
|
static union header * const NIL = NULL;
|
||||||
#endif
|
#endif
|
||||||
union header *bp, *p, *s = NIL, *t = NIL;
|
union header *bp, *p, *s = NIL, *t = NIL;
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,8 @@ typedef struct {
|
||||||
|
|
||||||
pic_value err;
|
pic_value err;
|
||||||
|
|
||||||
|
pic_code *iseq; /* for pic_apply_trampoline */
|
||||||
|
|
||||||
char *native_stack_start;
|
char *native_stack_start;
|
||||||
} pic_state;
|
} pic_state;
|
||||||
|
|
||||||
|
|
|
@ -204,6 +204,13 @@ pic_open(int argc, char *argv[], char **envp, pic_allocf allocf)
|
||||||
goto EXIT_ARENA;
|
goto EXIT_ARENA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* trampoline iseq */
|
||||||
|
pic->iseq = allocf(NULL, 2 * sizeof(pic_code));
|
||||||
|
|
||||||
|
if (! pic->iseq) {
|
||||||
|
goto EXIT_ISEQ;
|
||||||
|
}
|
||||||
|
|
||||||
/* memory heap */
|
/* memory heap */
|
||||||
pic->heap = pic_heap_open(pic);
|
pic->heap = pic_heap_open(pic);
|
||||||
|
|
||||||
|
@ -373,6 +380,8 @@ pic_open(int argc, char *argv[], char **envp, pic_allocf allocf)
|
||||||
|
|
||||||
return pic;
|
return pic;
|
||||||
|
|
||||||
|
EXIT_ISEQ:
|
||||||
|
allocf(pic->arena, 0);
|
||||||
EXIT_ARENA:
|
EXIT_ARENA:
|
||||||
allocf(pic->xp, 0);
|
allocf(pic->xp, 0);
|
||||||
EXIT_XP:
|
EXIT_XP:
|
||||||
|
@ -431,6 +440,9 @@ pic_close(pic_state *pic)
|
||||||
allocf(pic->cibase, 0);
|
allocf(pic->cibase, 0);
|
||||||
allocf(pic->xpbase, 0);
|
allocf(pic->xpbase, 0);
|
||||||
|
|
||||||
|
/* free trampoline iseq */
|
||||||
|
allocf(pic->iseq, 0);
|
||||||
|
|
||||||
/* free global stacks */
|
/* free global stacks */
|
||||||
xh_destroy(&pic->syms);
|
xh_destroy(&pic->syms);
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ pic_get_args(pic_state *pic, const char *format, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* '|' should be followed by at least 1 char */
|
/* '|' should be followed by at least 1 char */
|
||||||
assert(opt <= optc);
|
assert((opt ? 1 : 0) <= optc);
|
||||||
/* '*' should not be followed by any char */
|
/* '*' should not be followed by any char */
|
||||||
assert(format[paramc + opt + optc + rest] == '\0');
|
assert(format[paramc + opt + optc + rest] == '\0');
|
||||||
|
|
||||||
|
@ -681,7 +681,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
pic_code boot[2];
|
pic_code boot[2];
|
||||||
|
|
||||||
#if PIC_DIRECT_THREADED_VM
|
#if PIC_DIRECT_THREADED_VM
|
||||||
static void *oplabels[] = {
|
static const void *oplabels[] = {
|
||||||
&&L_OP_NOP, &&L_OP_POP, &&L_OP_PUSHUNDEF, &&L_OP_PUSHNIL, &&L_OP_PUSHTRUE,
|
&&L_OP_NOP, &&L_OP_POP, &&L_OP_PUSHUNDEF, &&L_OP_PUSHNIL, &&L_OP_PUSHTRUE,
|
||||||
&&L_OP_PUSHFALSE, &&L_OP_PUSHINT, &&L_OP_PUSHCHAR, &&L_OP_PUSHCONST,
|
&&L_OP_PUSHFALSE, &&L_OP_PUSHINT, &&L_OP_PUSHCHAR, &&L_OP_PUSHCONST,
|
||||||
&&L_OP_GREF, &&L_OP_GSET, &&L_OP_LREF, &&L_OP_LSET, &&L_OP_CREF, &&L_OP_CSET,
|
&&L_OP_GREF, &&L_OP_GSET, &&L_OP_LREF, &&L_OP_LSET, &&L_OP_CREF, &&L_OP_CSET,
|
||||||
|
@ -1180,13 +1180,11 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
pic_value
|
pic_value
|
||||||
pic_apply_trampoline(pic_state *pic, struct pic_proc *proc, pic_value args)
|
pic_apply_trampoline(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
{
|
{
|
||||||
static pic_code iseq[2];
|
|
||||||
|
|
||||||
pic_value v, it, *sp;
|
pic_value v, it, *sp;
|
||||||
pic_callinfo *ci;
|
pic_callinfo *ci;
|
||||||
|
|
||||||
PIC_INIT_CODE_I(iseq[0], OP_NOP, 0);
|
PIC_INIT_CODE_I(pic->iseq[0], OP_NOP, 0);
|
||||||
PIC_INIT_CODE_I(iseq[1], OP_TAILCALL, -1);
|
PIC_INIT_CODE_I(pic->iseq[1], OP_TAILCALL, -1);
|
||||||
|
|
||||||
*pic->sp++ = pic_obj_value(proc);
|
*pic->sp++ = pic_obj_value(proc);
|
||||||
|
|
||||||
|
@ -1196,7 +1194,7 @@ pic_apply_trampoline(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
}
|
}
|
||||||
|
|
||||||
ci = PUSHCI();
|
ci = PUSHCI();
|
||||||
ci->ip = (pic_code *)iseq;
|
ci->ip = pic->iseq;
|
||||||
ci->fp = pic->sp;
|
ci->fp = pic->sp;
|
||||||
ci->retc = (int)pic_length(pic, args);
|
ci->retc = (int)pic_length(pic, args);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue