From e926b532eec971a5822c71cf47dca6c25ee33e6a Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Tue, 22 Jul 2014 23:08:15 +0900 Subject: Store exception message to `mesg` field of `struct RException`. --- src/gc.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/gc.c') diff --git a/src/gc.c b/src/gc.c index bdcbc5208..6fcac6c2f 100644 --- a/src/gc.c +++ b/src/gc.c @@ -515,7 +515,6 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj) case MRB_TT_OBJECT: case MRB_TT_DATA: - case MRB_TT_EXCEPTION: mrb_gc_mark_iv(mrb, (struct RObject*)obj); break; @@ -581,6 +580,13 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj) } break; + case MRB_TT_EXCEPTION: + mrb_gc_mark_iv(mrb, (struct RObject*)obj); + if ((obj->flags & MRB_EXC_MESG_INIT_FLAG) != 0) { + mrb_gc_mark_value(mrb, ((struct RException*)obj)->mesg); + } + break; + default: break; } @@ -751,7 +757,6 @@ gc_gray_mark(mrb_state *mrb, 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; @@ -801,6 +806,13 @@ gc_gray_mark(mrb_state *mrb, 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_INIT_FLAG) != 0) { + children++; + } + break; + default: break; } -- cgit v1.2.3