summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrbgems/mruby-proc-ext/src/proc.c8
-rw-r--r--src/codegen.c7
2 files changed, 12 insertions, 3 deletions
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));
+ }
}
}
}
diff --git a/src/codegen.c b/src/codegen.c
index a1564d955..cec0d226f 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -2503,7 +2503,12 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
p->irep->lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (p->nlocals - 1));
for (i=0, n=lv; n; i++,n=n->cdr) {
p->irep->lv[i].name = lv_name(n);
- p->irep->lv[i].r = lv_idx(p, lv_name(n));
+ if (lv_name(n)) {
+ p->irep->lv[i].r = lv_idx(p, lv_name(n));
+ }
+ else {
+ p->irep->lv[i].r = 0;
+ }
}
mrb_assert(i + 1 == p->nlocals);
}