diff options
author | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-19 06:21:55 +0000 |
---|---|---|
committer | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-19 06:21:55 +0000 |
commit | 390ea5442089b8507a7d88c7d8756049bfcc0d4a (patch) | |
tree | b82d8dca5891c6e7abd825dd5e6b8bda884e7b2e | |
parent | 14626ed20a6677ab767e764c9edff83f94872f1a (diff) | |
download | ruby-390ea5442089b8507a7d88c7d8756049bfcc0d4a.tar.gz |
Only mark the superclass if there is one
Some classes don't have a superclass, so we should check to see if it's
there before marking.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | gc.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -4757,7 +4757,9 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) case T_CLASS: case T_MODULE: mark_m_tbl(objspace, RCLASS_M_TBL(obj)); - gc_mark(objspace, RCLASS_SUPER((VALUE)obj)); + if (RCLASS_SUPER((VALUE)obj)) { + gc_mark(objspace, RCLASS_SUPER((VALUE)obj)); + } if (!RCLASS_EXT(obj)) break; mark_tbl(objspace, RCLASS_IV_TBL(obj)); mark_const_tbl(objspace, RCLASS_CONST_TBL(obj)); @@ -4767,7 +4769,9 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) if (FL_TEST(obj, RICLASS_IS_ORIGIN)) { mark_m_tbl(objspace, RCLASS_M_TBL(obj)); } - gc_mark(objspace, RCLASS_SUPER((VALUE)obj)); + if (RCLASS_SUPER((VALUE)obj)) { + gc_mark(objspace, RCLASS_SUPER((VALUE)obj)); + } if (!RCLASS_EXT(obj)) break; mark_m_tbl(objspace, RCLASS_CALLABLE_M_TBL(obj)); break; |