summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-eval/src/eval.c35
-rw-r--r--mrbgems/mruby-proc-ext/src/proc.c8
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));
+ }
}
}
}