ruby-changes:34633
From: ko1 <ko1@a...>
Date: Sun, 6 Jul 2014 21:10:27 +0900 (JST)
Subject: [ruby-changes:34633] ko1:r46716 (trunk): * gc.c: rename is_dead_object() to is_dying_object().
ko1 2014-07-06 21:02:57 +0900 (Sun, 06 Jul 2014) New Revision: 46716 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=46716 Log: * gc.c: rename is_dead_object() to is_dying_object(). This function is not opposite against is_live_object() because is_dying_object() does *not* check object type. * gc.c (is_dying_object): change condition. * gc.c (is_live_object): use T_NONE instead of 0. * gc.c (rb_objspace_dying_object_p): added. Modified files: trunk/ChangeLog trunk/gc.c Index: ChangeLog =================================================================== --- ChangeLog (revision 46715) +++ ChangeLog (revision 46716) @@ -1,3 +1,15 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Sun Jul 6 21:00:11 2014 Koichi Sasada <ko1@a...> + + * gc.c: rename is_dead_object() to is_dying_object(). + This function is not opposite against is_live_object() + because is_dying_object() does *not* check object type. + + * gc.c (is_dying_object): change condition. + + * gc.c (is_live_object): use T_NONE instead of 0. + + * gc.c (rb_objspace_dying_object_p): added. + Sun Jul 6 13:37:27 2014 Koichi Sasada <ko1@a...> * gc.c (rb_gc_register_mark_object): change data structure. Index: gc.c =================================================================== --- gc.c (revision 46715) +++ gc.c (revision 46716) @@ -2330,22 +2330,34 @@ is_swept_object(rb_objspace_t *objspace, https://github.com/ruby/ruby/blob/trunk/gc.c#L2330 } static inline int -is_dead_object(rb_objspace_t *objspace, VALUE ptr) +is_dying_object(rb_objspace_t *objspace, VALUE ptr) { - if (!is_lazy_sweeping(heap_eden) || MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(ptr), ptr)) return FALSE; - if (!is_swept_object(objspace, ptr)) return TRUE; - return FALSE; + if (!is_lazy_sweeping(heap_eden) || + !is_swept_object(objspace, ptr) || + MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(ptr), ptr)) { + + return FALSE; + } + else { + return TRUE; + } } static inline int is_live_object(rb_objspace_t *objspace, VALUE ptr) { switch (BUILTIN_TYPE(ptr)) { - case 0: case T_ZOMBIE: + case T_NONE: + case T_ZOMBIE: + return FALSE; + } + + if (is_dying_object(objspace, ptr)) { return FALSE; } - if (is_dead_object(objspace, ptr)) return FALSE; - return TRUE; + else { + return TRUE; + } } static inline int @@ -2369,6 +2381,13 @@ rb_objspace_markable_object_p(VALUE obj) https://github.com/ruby/ruby/blob/trunk/gc.c#L2381 return is_markable_object(objspace, obj) && is_live_object(objspace, obj); } +int +rb_objspace_dying_object_p(VALUE obj) +{ + rb_objspace_t *objspace = &rb_objspace; + return is_dying_object(objspace, obj); +} + /* * call-seq: * ObjectSpace._id2ref(object_id) -> an_object -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/