diff options
Diffstat (limited to 'mrbgems')
| -rw-r--r-- | mrbgems/mruby-eval/src/eval.c | 35 | ||||
| -rw-r--r-- | mrbgems/mruby-proc-ext/src/proc.c | 8 |
2 files changed, 23 insertions, 20 deletions
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c index 78c47750b..daf5b2a1e 100644 --- a/mrbgems/mruby-eval/src/eval.c +++ b/mrbgems/mruby-eval/src/eval.c @@ -38,7 +38,7 @@ search_variable(mrb_state *mrb, mrb_sym vsym, int bnest) } for (pos = 0; pos < virep->nlocals - 1; pos++) { if (vsym == virep->lv[pos].name) { - return (MKARG_B(pos + 1) | MKARG_C(level + bnest)); + return (MKARG_B(pos + 1) | MKARG_C(level + bnest)); } } } @@ -62,33 +62,33 @@ patch_irep(mrb_state *mrb, mrb_irep *irep, int bnest) switch(GET_OPCODE(c)){ case OP_SEND: if (GETARG_C(c) != 0) { - break; + break; } { - mrb_code arg = search_variable(mrb, irep->syms[GETARG_B(c)], bnest); - if (arg != 0) { - /* must replace */ - irep->iseq[i] = MKOPCODE(OP_GETUPVAR) | MKARG_A(GETARG_A(c)) | arg; - } + mrb_code arg = search_variable(mrb, irep->syms[GETARG_B(c)], bnest); + if (arg != 0) { + /* must replace */ + irep->iseq[i] = MKOPCODE(OP_GETUPVAR) | MKARG_A(GETARG_A(c)) | arg; + } } break; case OP_MOVE: /* src part */ if (GETARG_B(c) < irep->nlocals) { - mrb_code arg = search_variable(mrb, irep->lv[GETARG_B(c) - 1].name, bnest); - if (arg != 0) { - /* must replace */ - irep->iseq[i] = MKOPCODE(OP_GETUPVAR) | MKARG_A(GETARG_A(c)) | arg; - } + mrb_code arg = search_variable(mrb, irep->lv[GETARG_B(c) - 1].name, bnest); + if (arg != 0) { + /* must replace */ + irep->iseq[i] = MKOPCODE(OP_GETUPVAR) | MKARG_A(GETARG_A(c)) | arg; + } } /* dst part */ if (GETARG_A(c) < irep->nlocals) { - mrb_code arg = search_variable(mrb, irep->lv[GETARG_A(c) - 1].name, bnest); - if (arg != 0) { - /* must replace */ - irep->iseq[i] = MKOPCODE(OP_SETUPVAR) | MKARG_A(GETARG_B(c)) | arg; - } + mrb_code arg = search_variable(mrb, irep->lv[GETARG_A(c) - 1].name, bnest); + if (arg != 0) { + /* must replace */ + irep->iseq[i] = MKOPCODE(OP_SETUPVAR) | MKARG_A(GETARG_B(c)) | arg; + } } break; } @@ -180,4 +180,3 @@ void mrb_mruby_eval_gem_final(mrb_state* mrb) { } - diff --git a/mrbgems/mruby-proc-ext/src/proc.c b/mrbgems/mruby-proc-ext/src/proc.c index f0e677045..546ed49e5 100644 --- a/mrbgems/mruby-proc-ext/src/proc.c +++ b/mrbgems/mruby-proc-ext/src/proc.c @@ -142,7 +142,9 @@ mrb_local_variables(mrb_state *mrb, mrb_value self) } ret = mrb_ary_new_capa(mrb, irep->nlocals - 1); for (i = 0; i + 1 < irep->nlocals; ++i) { - mrb_ary_push(mrb, ret, mrb_symbol_value(irep->lv[i].name)); + if (irep->lv[i].name) { + mrb_ary_push(mrb, ret, mrb_symbol_value(irep->lv[i].name)); + } } if (proc->env) { struct REnv *e = proc->env; @@ -152,7 +154,9 @@ mrb_local_variables(mrb_state *mrb, mrb_value self) irep = mrb->c->cibase[e->cioff].proc->body.irep; if (irep->lv) { for (i = 0; i + 1 < irep->nlocals; ++i) { - mrb_ary_push(mrb, ret, mrb_symbol_value(irep->lv[i].name)); + if (irep->lv[i].name) { + mrb_ary_push(mrb, ret, mrb_symbol_value(irep->lv[i].name)); + } } } } |
