diff options
| -rw-r--r-- | src/dump.c | 2 | ||||
| -rw-r--r-- | src/gc.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/dump.c b/src/dump.c index 89b0053da..76d9fe1bc 100644 --- a/src/dump.c +++ b/src/dump.c @@ -1052,7 +1052,7 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, /* dump lv */ if (irep->lv) { len=irep->nlocals; - fprintf(fp, "static const mrb_sym %s_lv_%d[%d] = {", name, n, len); + fprintf(fp, "static const mrb_sym %s_lv_%d[%d] = {", name, n, len-1); for (i=0; i+1<len; i++) { fprintf(fp, "%uU, ", irep->lv[i]); } @@ -760,6 +760,14 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) mrb_gc_mark_range(mrb, (struct RRange*)obj); break; + case MRB_TT_BREAK: + { + struct RBreak *brk = (struct RBreak*)obj; + mrb_gc_mark(mrb, (struct RBasic*)mrb_break_proc_get(brk)); + mrb_gc_mark_value(mrb, mrb_break_value_get(brk)); + } + break; + default: break; } @@ -1019,6 +1027,7 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) case MRB_TT_PROC: case MRB_TT_RANGE: + case MRB_TT_BREAK: children+=2; break; |
