diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-12 22:14:11 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-10-12 22:14:11 +0900 |
| commit | 291234c7aa17727d4a2e581330e0eb3c0f388c6b (patch) | |
| tree | ed236208eb00ca16f5be0eedcb599b5b18e1841a /src/gc.c | |
| parent | 5004d9a282145488dd8f32668805145b02977be1 (diff) | |
| parent | f77fb11f4e47164c7c6063a20ed0791bf151308f (diff) | |
| download | mruby-291234c7aa17727d4a2e581330e0eb3c0f388c6b.tar.gz mruby-291234c7aa17727d4a2e581330e0eb3c0f388c6b.zip | |
Merge branch 'exc_mesg' of https://github.com/take-cheeze/mruby into take-cheeze-exc_mesg
Diffstat (limited to 'src/gc.c')
| -rw-r--r-- | src/gc.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -686,7 +686,6 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) case MRB_TT_OBJECT: case MRB_TT_DATA: - case MRB_TT_EXCEPTION: mrb_gc_mark_iv(mrb, (struct RObject*)obj); break; @@ -759,6 +758,13 @@ gc_mark_children(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) } break; + case MRB_TT_EXCEPTION: + mrb_gc_mark_iv(mrb, (struct RObject*)obj); + if ((obj->flags & MRB_EXC_MESG_STRING_FLAG) != 0) { + mrb_gc_mark(mrb, (struct RBasic*)((struct RException*)obj)->mesg); + } + break; + default: break; } @@ -989,7 +995,6 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) case MRB_TT_OBJECT: case MRB_TT_DATA: - case MRB_TT_EXCEPTION: children += mrb_gc_mark_iv_size(mrb, (struct RObject*)obj); break; @@ -1042,6 +1047,13 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) children+=2; break; + case MRB_TT_EXCEPTION: + children += mrb_gc_mark_iv_size(mrb, (struct RObject*)obj); + if ((obj->flags & MRB_EXC_MESG_STRING_FLAG) != 0) { + children++; + } + break; + default: break; } |
