VM: simplified logic in data_heap_checker
							parent
							
								
									6dd2fe31b6
								
							
						
					
					
						commit
						bf7161604e
					
				| 
						 | 
					@ -58,21 +58,17 @@ struct slot_checker {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void operator()(cell* slot_ptr) {
 | 
					  void operator()(cell* slot_ptr) {
 | 
				
			||||||
    if (!immediate_p(*slot_ptr)) {
 | 
					    if (immediate_p(*slot_ptr))
 | 
				
			||||||
      generation target = generation_of(parent, untag<object>(*slot_ptr));
 | 
					      return;
 | 
				
			||||||
      switch (gen) {
 | 
					
 | 
				
			||||||
        case nursery_generation:
 | 
					    generation target = generation_of(parent, untag<object>(*slot_ptr));
 | 
				
			||||||
          break;
 | 
					    if (gen == aging_generation && target == nursery_generation) {
 | 
				
			||||||
        case aging_generation:
 | 
					      check_write_barrier(slot_ptr, target, card_points_to_nursery);
 | 
				
			||||||
          if (target == nursery_generation)
 | 
					    } else if (gen == tenured_generation) {
 | 
				
			||||||
            check_write_barrier(slot_ptr, target, card_points_to_nursery);
 | 
					      if (target == nursery_generation) {
 | 
				
			||||||
          break;
 | 
					        check_write_barrier(slot_ptr, target, card_points_to_nursery);
 | 
				
			||||||
        case tenured_generation:
 | 
					      } else if (target == aging_generation) {
 | 
				
			||||||
          if (target == nursery_generation)
 | 
					        check_write_barrier(slot_ptr, target, card_points_to_aging);
 | 
				
			||||||
            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;
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -81,10 +77,11 @@ struct slot_checker {
 | 
				
			||||||
struct object_checker {
 | 
					struct object_checker {
 | 
				
			||||||
  factor_vm* parent;
 | 
					  factor_vm* parent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  explicit object_checker(factor_vm* parent) : parent(parent) {}
 | 
					  object_checker(factor_vm* parent) : parent(parent) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void operator()(object* obj) {
 | 
					  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);
 | 
					    obj->each_slot(checker);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue