Commit 836a5ea3 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #437 from masamitsu-murase/modify_irep_initialization_and_gc_mark

Modify irep initialization and GC.
parents ed9f1852 a851bcd6
...@@ -587,8 +587,10 @@ root_scan_phase(mrb_state *mrb) ...@@ -587,8 +587,10 @@ root_scan_phase(mrb_state *mrb)
mrb_gc_mark(mrb, (struct RBasic*)ci->target_class); mrb_gc_mark(mrb, (struct RBasic*)ci->target_class);
} }
/* mark irep pool */ /* mark irep pool */
for (i=0; i<mrb->irep_len; i++) { if (mrb->irep) {
if (mrb->irep) { size_t len = mrb->irep_len;
if (len > mrb->irep_capa) len = mrb->irep_capa;
for (i=0; i<len; i++) {
mrb_irep *irep = mrb->irep[i]; mrb_irep *irep = mrb->irep[i];
if (!irep) continue; if (!irep) continue;
for (j=0; j<irep->plen; j++) { for (j=0; j<irep->plen; j++) {
......
...@@ -83,10 +83,12 @@ mrb_add_irep(mrb_state *mrb, int idx) ...@@ -83,10 +83,12 @@ mrb_add_irep(mrb_state *mrb, int idx)
mrb->irep_capa = max; mrb->irep_capa = max;
} }
else if (mrb->irep_capa <= idx) { else if (mrb->irep_capa <= idx) {
size_t old_capa = mrb->irep_capa;
while (mrb->irep_capa <= idx) { while (mrb->irep_capa <= idx) {
mrb->irep_capa *= 2; mrb->irep_capa *= 2;
} }
mrb->irep = (mrb_irep **)mrb_realloc(mrb, mrb->irep, sizeof(mrb_irep*)*mrb->irep_capa); mrb->irep = (mrb_irep **)mrb_realloc(mrb, mrb->irep, sizeof(mrb_irep*)*mrb->irep_capa);
memset(mrb->irep + old_capa, 0, sizeof(mrb_irep*) * (mrb->irep_capa - old_capa));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment