VM: simplified logic in data_heap_checker
parent
6dd2fe31b6
commit
bf7161604e
|
@ -58,21 +58,17 @@ struct slot_checker {
|
|||
}
|
||||
|
||||
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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -81,10 +77,11 @@ struct slot_checker {
|
|||
struct object_checker {
|
||||
factor_vm* parent;
|
||||
|
||||
explicit object_checker(factor_vm* parent) : parent(parent) {}
|
||||
object_checker(factor_vm* parent) : parent(parent) {}
|
||||
|
||||
void operator()(object* obj) {
|
||||
slot_checker checker(parent, obj, generation_of(parent, obj));
|
||||
generation obj_gen = generation_of(parent, obj);
|
||||
slot_checker checker(parent, obj, obj_gen);
|
||||
obj->each_slot(checker);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue