VM: Refactor nursery_* to Factor style
							parent
							
								
									d57c1cc579
								
							
						
					
					
						commit
						bac6919705
					
				| 
						 | 
				
			
			@ -1,45 +1,42 @@
 | 
			
		|||
#include "master.hpp"
 | 
			
		||||
 | 
			
		||||
namespace factor
 | 
			
		||||
{
 | 
			
		||||
namespace factor {
 | 
			
		||||
 | 
			
		||||
nursery_collector::nursery_collector(factor_vm *parent_) :
 | 
			
		||||
	copying_collector<aging_space,nursery_policy>(
 | 
			
		||||
		parent_,
 | 
			
		||||
		parent_->data->aging,
 | 
			
		||||
		nursery_policy(parent_)) {}
 | 
			
		||||
nursery_collector::nursery_collector(factor_vm* parent_)
 | 
			
		||||
    : copying_collector<aging_space, nursery_policy>(parent_,
 | 
			
		||||
                                                     parent_->data->aging,
 | 
			
		||||
                                                     nursery_policy(parent_)) {}
 | 
			
		||||
 | 
			
		||||
void factor_vm::collect_nursery()
 | 
			
		||||
{
 | 
			
		||||
	/* Copy live objects from the nursery (as determined by the root set and
 | 
			
		||||
	marked cards in aging and tenured) to aging space. */
 | 
			
		||||
	nursery_collector collector(this);
 | 
			
		||||
void factor_vm::collect_nursery() {
 | 
			
		||||
  /* Copy live objects from the nursery (as determined by the root set and
 | 
			
		||||
     marked cards in aging and tenured) to aging space. */
 | 
			
		||||
  nursery_collector collector(this);
 | 
			
		||||
 | 
			
		||||
	collector.trace_roots();
 | 
			
		||||
	collector.trace_contexts();
 | 
			
		||||
  collector.trace_roots();
 | 
			
		||||
  collector.trace_contexts();
 | 
			
		||||
 | 
			
		||||
	gc_event *event = current_gc->event;
 | 
			
		||||
  gc_event* event = current_gc->event;
 | 
			
		||||
 | 
			
		||||
	if(event) event->started_card_scan();
 | 
			
		||||
	collector.trace_cards(data->tenured,
 | 
			
		||||
		card_points_to_nursery,
 | 
			
		||||
		simple_unmarker(card_points_to_nursery));
 | 
			
		||||
	if(data->aging->here != data->aging->start)
 | 
			
		||||
	{
 | 
			
		||||
		collector.trace_cards(data->aging,
 | 
			
		||||
			card_points_to_nursery,
 | 
			
		||||
			full_unmarker());
 | 
			
		||||
	}
 | 
			
		||||
	if(event) event->ended_card_scan(collector.cards_scanned,collector.decks_scanned);
 | 
			
		||||
  if (event)
 | 
			
		||||
    event->started_card_scan();
 | 
			
		||||
  collector.trace_cards(data->tenured, card_points_to_nursery,
 | 
			
		||||
                        simple_unmarker(card_points_to_nursery));
 | 
			
		||||
  if (data->aging->here != data->aging->start) {
 | 
			
		||||
    collector.trace_cards(data->aging, card_points_to_nursery, full_unmarker());
 | 
			
		||||
  }
 | 
			
		||||
  if (event)
 | 
			
		||||
    event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
 | 
			
		||||
 | 
			
		||||
	if(event) event->started_code_scan();
 | 
			
		||||
	collector.trace_code_heap_roots(&code->points_to_nursery);
 | 
			
		||||
	if(event) event->ended_code_scan(collector.code_blocks_scanned);
 | 
			
		||||
  if (event)
 | 
			
		||||
    event->started_code_scan();
 | 
			
		||||
  collector.trace_code_heap_roots(&code->points_to_nursery);
 | 
			
		||||
  if (event)
 | 
			
		||||
    event->ended_code_scan(collector.code_blocks_scanned);
 | 
			
		||||
 | 
			
		||||
	collector.cheneys_algorithm();
 | 
			
		||||
  collector.cheneys_algorithm();
 | 
			
		||||
 | 
			
		||||
	data->reset_generation(&nursery);
 | 
			
		||||
	code->points_to_nursery.clear();
 | 
			
		||||
  data->reset_generation(&nursery);
 | 
			
		||||
  code->points_to_nursery.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,19 @@
 | 
			
		|||
namespace factor
 | 
			
		||||
{
 | 
			
		||||
namespace factor {
 | 
			
		||||
 | 
			
		||||
struct nursery_policy {
 | 
			
		||||
	factor_vm *parent;
 | 
			
		||||
  factor_vm* parent;
 | 
			
		||||
 | 
			
		||||
	explicit nursery_policy(factor_vm *parent_) : parent(parent_) {}
 | 
			
		||||
  explicit nursery_policy(factor_vm* parent_) : parent(parent_) {}
 | 
			
		||||
 | 
			
		||||
	bool should_copy_p(object *obj)
 | 
			
		||||
	{
 | 
			
		||||
		return parent->nursery.contains_p(obj);
 | 
			
		||||
	}
 | 
			
		||||
  bool should_copy_p(object* obj) { return parent->nursery.contains_p(obj); }
 | 
			
		||||
 | 
			
		||||
	void promoted_object(object *obj) {}
 | 
			
		||||
  void promoted_object(object* obj) {}
 | 
			
		||||
 | 
			
		||||
	void visited_object(object *obj) {}
 | 
			
		||||
  void visited_object(object* obj) {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct nursery_collector : copying_collector<aging_space,nursery_policy> {
 | 
			
		||||
	explicit nursery_collector(factor_vm *parent_);
 | 
			
		||||
struct nursery_collector : copying_collector<aging_space, nursery_policy> {
 | 
			
		||||
  explicit nursery_collector(factor_vm* parent_);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,8 @@
 | 
			
		|||
namespace factor
 | 
			
		||||
{
 | 
			
		||||
namespace factor {
 | 
			
		||||
 | 
			
		||||
struct nursery_space : bump_allocator<object>
 | 
			
		||||
{
 | 
			
		||||
	explicit nursery_space(cell size, cell start) : bump_allocator<object>(size,start) {}
 | 
			
		||||
struct nursery_space : bump_allocator<object> {
 | 
			
		||||
  explicit nursery_space(cell size, cell start)
 | 
			
		||||
      : bump_allocator<object>(size, start) {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue