diff options
author | Koichi Sasada <ko1@atdot.net> | 2019-05-23 16:52:14 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2019-05-23 16:58:21 +0900 |
commit | 6be0ab73c3f2cc95d76ca21203adf6a73c8705e7 (patch) | |
tree | fdf23b2398e98c0cc647664027ee304b791ae6eb /gc.c | |
parent | 65637dae30bda83b72f185bbcf01d7bad80926c7 (diff) | |
download | ruby-6be0ab73c3f2cc95d76ca21203adf6a73c8705e7.tar.gz |
gc_pin() doesn't check is_markable_object().
Caller of gc_pin() should check it is a mark-able object.
So gc_pin() doesn't need to check it. With this fix,
we can refactoring around it.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 13 |
1 files changed, 6 insertions, 7 deletions
@@ -4693,8 +4693,7 @@ gc_mark_maybe(rb_objspace_t *objspace, VALUE obj) case T_NONE: break; default: - gc_pin(objspace, obj); - gc_mark_ptr(objspace, obj); + gc_mark_and_pin(objspace, obj); break; } @@ -4844,18 +4843,18 @@ gc_mark_ptr(rb_objspace_t *objspace, VALUE obj) } static inline void -gc_mark_and_pin(rb_objspace_t *objspace, VALUE obj) +gc_pin(rb_objspace_t *objspace, VALUE obj) { - if (!is_markable_object(objspace, obj)) return; + GC_ASSERT(is_markable_object(objspace, obj)); MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj); - gc_mark_ptr(objspace, obj); } static inline void -gc_pin(rb_objspace_t *objspace, VALUE obj) +gc_mark_and_pin(rb_objspace_t *objspace, VALUE obj) { if (!is_markable_object(objspace, obj)) return; - MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj); + gc_pin(objspace, obj); + gc_mark_ptr(objspace, obj); } static inline void |