mruby gc.c のis_deadとは何でしょうか
#define is_dead(s, o) (((o)->color & other_white_part(s) & MRB_GC_WHITES) || (o)->tt == MRB_TT_FREE)
object.hで定義されています。
まずはother_white_partが何かを見てみましょう。
#define other_white_part(s) ((s)->current_white_part ^ MRB_GC_WHITES)
current_white_part にMRB_GC_WHITESのnotをしています。
ここでMRB_GC_WHITESは0b11なので
もしcurrent_white_partが0b10なら0b01、0b01なら0b10とビットが反転します。
つまりcurrent_white_partの反対がother_white_partになるわけです。
ではis_deadを解析していきましょう。
is_deadはo->colorとother_white_partが互い違いの時0になります。
0b10 & 0b01 & 0b11 = 0だからです。
とするとo->colorとother_white_partが同じ時trueになるということです。
つまりo->colorとother_white_partが同じ時死んだobjectとみなされるということです。