register<nlocals may not have a local variable name (e.g. a block arg); fix #2258

This commit is contained in:
Yukihiro "Matz" Matsumoto
2014-05-16 00:04:55 +09:00
parent 60051de401
commit 41b46ca1ed
2 changed files with 12 additions and 3 deletions
+6 -1
View File
@@ -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);
}