diff --git a/contrib/10.callcc/callcc.c b/contrib/10.callcc/callcc.c index 6c62741e..ce9db7c7 100644 --- a/contrib/10.callcc/callcc.c +++ b/contrib/10.callcc/callcc.c @@ -20,7 +20,7 @@ struct fullcont { size_t ci_offset; ptrdiff_t ci_len; - struct code *ip; + const struct code *ip; struct object **arena; size_t arena_size, arena_idx; diff --git a/extlib/benz/cont.c b/extlib/benz/cont.c index 02fd42e6..6eff9709 100644 --- a/extlib/benz/cont.c +++ b/extlib/benz/cont.c @@ -13,7 +13,7 @@ struct cont { ptrdiff_t sp_offset; ptrdiff_t ci_offset; size_t arena_idx; - struct code *ip; + const struct code *ip; int retc; pic_value *retv; diff --git a/extlib/benz/include/picrin/private/state.h b/extlib/benz/include/picrin/private/state.h index a779f43e..06b63118 100644 --- a/extlib/benz/include/picrin/private/state.h +++ b/extlib/benz/include/picrin/private/state.h @@ -23,7 +23,7 @@ struct lib { struct callinfo { int argc, retc; - struct code *ip; + const struct code *ip; pic_value *fp; struct irep *irep; struct context *cxt; @@ -48,7 +48,7 @@ struct pic_state { struct callinfo *ci; struct callinfo *cibase, *ciend; - struct code *ip; + const struct code *ip; const char *lib; @@ -62,7 +62,6 @@ struct pic_state { struct list_head ireps; xFILE files[XOPEN_MAX]; - struct code iseq[2]; /* for pic_apply_trampoline */ bool gc_enable; struct heap *heap; diff --git a/extlib/benz/proc.c b/extlib/benz/proc.c index a097d3b7..a77814e0 100644 --- a/extlib/benz/proc.c +++ b/extlib/benz/proc.c @@ -783,15 +783,11 @@ pic_apply(pic_state *pic, pic_value proc, int argc, pic_value *argv) pic_value pic_applyk(pic_state *pic, pic_value proc, int argc, pic_value *args) { + static const struct code iseq[2] = { { OP_NOP, 0, 0 }, { OP_TAILCALL, -1, 0 } }; pic_value *sp; struct callinfo *ci; int i; - pic->iseq[0].insn = OP_NOP; - pic->iseq[0].a = 0; - pic->iseq[1].insn = OP_TAILCALL; - pic->iseq[1].a = -1; - *pic->sp++ = proc; sp = pic->sp; @@ -800,7 +796,7 @@ pic_applyk(pic_state *pic, pic_value proc, int argc, pic_value *args) } ci = PUSHCI(); - ci->ip = pic->iseq; + ci->ip = iseq; ci->fp = pic->sp; ci->retc = (int)argc;