void operator()(cell* slot_ptr) { if (immediate_p(*slot_ptr)) return; generation target = generation_of(parent, untag<object>(*slot_ptr)); if (gen == aging_generation && target == nursery_generation) { check_write_barrier(slot_ptr, target, card_points_to_nursery); } else if (gen == tenured_generation) { if (target == nursery_generation) { check_write_barrier(slot_ptr, target, card_points_to_nursery); } else if (target == aging_generation) { check_write_barrier(slot_ptr, target, card_points_to_aging); } } }
void operator()(cell *slot_ptr) { if(!immediate_p(*slot_ptr)) { generation target = generation_of(parent,untag<object>(*slot_ptr)); switch(gen) { case nursery_generation: break; case aging_generation: if(target == nursery_generation) check_write_barrier(slot_ptr,target,card_points_to_nursery); break; case tenured_generation: if(target == nursery_generation) check_write_barrier(slot_ptr,target,card_points_to_nursery); else if(target == aging_generation) check_write_barrier(slot_ptr,target,card_points_to_aging); break; } } }