cleanup vm
This commit is contained in:
parent
71a56a6b75
commit
8767d57fbd
|
@ -640,10 +640,9 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
}
|
}
|
||||||
CASE(OP_LREF) {
|
CASE(OP_LREF) {
|
||||||
pic_callinfo *ci = pic->ci;
|
pic_callinfo *ci = pic->ci;
|
||||||
struct pic_irep *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) {
|
||||||
irep = pic_get_proc(pic)->u.i.irep;
|
|
||||||
if (c.u.i >= irep->argc + irep->localc) {
|
if (c.u.i >= irep->argc + irep->localc) {
|
||||||
PUSH(ci->cxt->regs[c.u.i - (ci->regs - ci->fp)]);
|
PUSH(ci->cxt->regs[c.u.i - (ci->regs - ci->fp)]);
|
||||||
NEXT;
|
NEXT;
|
||||||
|
@ -654,10 +653,9 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
}
|
}
|
||||||
CASE(OP_LSET) {
|
CASE(OP_LSET) {
|
||||||
pic_callinfo *ci = pic->ci;
|
pic_callinfo *ci = pic->ci;
|
||||||
struct pic_irep *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) {
|
||||||
irep = pic_get_proc(pic)->u.i.irep;
|
|
||||||
if (c.u.i >= irep->argc + irep->localc) {
|
if (c.u.i >= irep->argc + irep->localc) {
|
||||||
ci->cxt->regs[c.u.i - (ci->regs - ci->fp)] = POP();
|
ci->cxt->regs[c.u.i - (ci->regs - ci->fp)] = POP();
|
||||||
PUSH(pic_undef_value());
|
PUSH(pic_undef_value());
|
||||||
|
@ -734,7 +732,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
ci->fp = pic->sp - c.u.i;
|
ci->fp = pic->sp - c.u.i;
|
||||||
ci->irep = NULL;
|
ci->irep = NULL;
|
||||||
ci->cxt = NULL;
|
ci->cxt = NULL;
|
||||||
if (pic_proc_func_p(pic_proc_ptr(x))) {
|
if (pic_proc_func_p(proc)) {
|
||||||
|
|
||||||
/* invoke! */
|
/* invoke! */
|
||||||
v = proc->u.f.func(pic);
|
v = proc->u.f.func(pic);
|
||||||
|
@ -776,11 +774,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* prepare cxt */
|
/* prepare cxt */
|
||||||
if (pic_proc_irep_p(proc)) {
|
|
||||||
ci->up = proc->u.i.cxt;
|
ci->up = proc->u.i.cxt;
|
||||||
} else {
|
|
||||||
ci->up = NULL;
|
|
||||||
}
|
|
||||||
ci->regc = irep->capturec;
|
ci->regc = irep->capturec;
|
||||||
ci->regs = ci->fp + irep->argc + irep->localc;
|
ci->regs = ci->fp + irep->argc + irep->localc;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue