[bugfix] don't refer to env storage when accessing non-captured variable

This commit is contained in:
Yuichi Nishiwaki 2014-09-18 14:14:09 +09:00
parent 46c1d0f2a7
commit b0b1b77c65
1 changed files with 12 additions and 4 deletions

16
vm.c
View File

@ -755,20 +755,28 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
}
CASE(OP_LREF) {
pic_callinfo *ci = pic->ci;
struct pic_irep *irep;
if (ci->env != NULL && ci->env->regs == ci->env->storage) {
PUSH(ci->env->regs[c.u.i - (ci->regs - ci->fp)]);
NEXT;
irep = pic_get_proc(pic)->u.irep;
if (c.u.i >= irep->argc + irep->localc) {
PUSH(ci->env->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->env != NULL && ci->env->regs == ci->env->storage) {
ci->env->regs[c.u.i - (ci->regs - ci->fp)] = POP();
NEXT;
irep = pic_get_proc(pic)->u.irep;
if (c.u.i >= irep->argc + irep->localc) {
ci->env->regs[c.u.i - (ci->regs - ci->fp)] = POP();
NEXT;
}
}
pic->ci->fp[c.u.i] = POP();
NEXT;