diff --git a/extlib/benz/vm.c b/extlib/benz/vm.c index d3000399..89dbe518 100644 --- a/extlib/benz/vm.c +++ b/extlib/benz/vm.c @@ -626,10 +626,30 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args) NEXT; } CASE(OP_LREF) { + pic_callinfo *ci = pic->ci; + struct pic_irep *irep; + + 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) { + PUSH(ci->cxt->regs[c.u.i - (ci->regs - ci->fp)]); + NEXT; + } + } PUSH(pic->ci->fp[c.u.i]); NEXT; } CASE(OP_LSET) { + pic_callinfo *ci = pic->ci; + struct pic_irep *irep; + + 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) { + ci->cxt->regs[c.u.i - (ci->regs - ci->fp)] = POP(); + NEXT; + } + } pic->ci->fp[c.u.i] = POP(); PUSH(pic_undef_value()); NEXT;