VM: it's confusing that slot_visitors are called "workhorse" sometimes, let's standardize the name "visitor"
							parent
							
								
									5490c50217
								
							
						
					
					
						commit
						667e5768ba
					
				| 
						 | 
				
			
			@ -79,7 +79,7 @@ template <typename TargetGeneration, typename Policy> struct collector {
 | 
			
		|||
  code_heap* code;
 | 
			
		||||
  TargetGeneration* target;
 | 
			
		||||
  gc_workhorse<TargetGeneration, Policy> workhorse;
 | 
			
		||||
  slot_visitor<gc_workhorse<TargetGeneration, Policy> > data_visitor;
 | 
			
		||||
  slot_visitor<gc_workhorse<TargetGeneration, Policy> > visitor;
 | 
			
		||||
  cell cards_scanned;
 | 
			
		||||
  cell decks_scanned;
 | 
			
		||||
  cell code_blocks_scanned;
 | 
			
		||||
| 
						 | 
				
			
			@ -90,13 +90,13 @@ template <typename TargetGeneration, typename Policy> struct collector {
 | 
			
		|||
        code(parent->code),
 | 
			
		||||
        target(target),
 | 
			
		||||
        workhorse(parent, target, policy),
 | 
			
		||||
        data_visitor(parent, workhorse),
 | 
			
		||||
        visitor(parent, workhorse),
 | 
			
		||||
        cards_scanned(0),
 | 
			
		||||
        decks_scanned(0),
 | 
			
		||||
        code_blocks_scanned(0) {}
 | 
			
		||||
 | 
			
		||||
  void trace_object(object* ptr) {
 | 
			
		||||
    data_visitor.visit_slots(ptr);
 | 
			
		||||
    visitor.visit_slots(ptr);
 | 
			
		||||
    if (ptr->type() == ALIEN_TYPE)
 | 
			
		||||
      ((alien*)ptr)->update_address();
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -107,8 +107,8 @@ template <typename TargetGeneration, typename Policy> struct collector {
 | 
			
		|||
 | 
			
		||||
    for (; iter != end; iter++) {
 | 
			
		||||
      code_block* compiled = *iter;
 | 
			
		||||
      data_visitor.visit_code_block_objects(compiled);
 | 
			
		||||
      data_visitor.visit_embedded_literals(compiled);
 | 
			
		||||
      visitor.visit_code_block_objects(compiled);
 | 
			
		||||
      visitor.visit_embedded_literals(compiled);
 | 
			
		||||
      compiled->flush_icache();
 | 
			
		||||
      code_blocks_scanned++;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ template <typename TargetGeneration, typename Policy> struct collector {
 | 
			
		|||
      cell* end_ptr = (cell*)end;
 | 
			
		||||
 | 
			
		||||
      for (; slot_ptr < end_ptr; slot_ptr++)
 | 
			
		||||
        data_visitor.visit_handle(slot_ptr);
 | 
			
		||||
        visitor.visit_handle(slot_ptr);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,13 +127,13 @@ void factor_vm::fixup_data(cell data_offset, cell code_offset) {
 | 
			
		|||
struct startup_code_block_relocation_visitor {
 | 
			
		||||
  factor_vm* parent;
 | 
			
		||||
  startup_fixup fixup;
 | 
			
		||||
  slot_visitor<startup_fixup> data_visitor;
 | 
			
		||||
  slot_visitor<startup_fixup> visitor;
 | 
			
		||||
 | 
			
		||||
  startup_code_block_relocation_visitor(factor_vm* parent,
 | 
			
		||||
                                        startup_fixup fixup)
 | 
			
		||||
      : parent(parent),
 | 
			
		||||
        fixup(fixup),
 | 
			
		||||
        data_visitor(slot_visitor<startup_fixup>(parent, fixup)) {}
 | 
			
		||||
        visitor(slot_visitor<startup_fixup>(parent, fixup)) {}
 | 
			
		||||
 | 
			
		||||
  void operator()(instruction_operand op) {
 | 
			
		||||
    code_block* compiled = op.compiled;
 | 
			
		||||
| 
						 | 
				
			
			@ -177,8 +177,8 @@ struct startup_code_block_updater {
 | 
			
		|||
      : parent(parent), fixup(fixup) {}
 | 
			
		||||
 | 
			
		||||
  void operator()(code_block* compiled, cell size) {
 | 
			
		||||
    slot_visitor<startup_fixup> data_visitor(parent, fixup);
 | 
			
		||||
    data_visitor.visit_code_block_objects(compiled);
 | 
			
		||||
    slot_visitor<startup_fixup> visitor(parent, fixup);
 | 
			
		||||
    visitor.visit_code_block_objects(compiled);
 | 
			
		||||
 | 
			
		||||
    startup_code_block_relocation_visitor code_visitor(parent, fixup);
 | 
			
		||||
    compiled->each_instruction_operand(code_visitor);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,24 +88,23 @@ struct slot_become_fixup : no_fixup {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
struct object_become_visitor {
 | 
			
		||||
  slot_visitor<slot_become_fixup>* workhorse;
 | 
			
		||||
  slot_visitor<slot_become_fixup>* visitor;
 | 
			
		||||
 | 
			
		||||
  explicit object_become_visitor(slot_visitor<slot_become_fixup>* workhorse)
 | 
			
		||||
      : workhorse(workhorse) {}
 | 
			
		||||
  explicit object_become_visitor(slot_visitor<slot_become_fixup>* visitor)
 | 
			
		||||
      : visitor(visitor) {}
 | 
			
		||||
 | 
			
		||||
  void operator()(object* obj) { workhorse->visit_slots(obj); }
 | 
			
		||||
  void operator()(object* obj) { visitor->visit_slots(obj); }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct code_block_become_visitor {
 | 
			
		||||
  slot_visitor<slot_become_fixup>* workhorse;
 | 
			
		||||
  slot_visitor<slot_become_fixup>* visitor;
 | 
			
		||||
 | 
			
		||||
  explicit code_block_become_visitor(
 | 
			
		||||
      slot_visitor<slot_become_fixup>* workhorse)
 | 
			
		||||
      : workhorse(workhorse) {}
 | 
			
		||||
      slot_visitor<slot_become_fixup>* visitor) : visitor(visitor) {}
 | 
			
		||||
 | 
			
		||||
  void operator()(code_block* compiled, cell size) {
 | 
			
		||||
    workhorse->visit_code_block_objects(compiled);
 | 
			
		||||
    workhorse->visit_embedded_literals(compiled);
 | 
			
		||||
    visitor->visit_code_block_objects(compiled);
 | 
			
		||||
    visitor->visit_embedded_literals(compiled);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -144,14 +143,14 @@ void factor_vm::primitive_become() {
 | 
			
		|||
 | 
			
		||||
  /* Update all references to old objects to point to new objects */
 | 
			
		||||
  {
 | 
			
		||||
    slot_visitor<slot_become_fixup> workhorse(this,
 | 
			
		||||
    slot_visitor<slot_become_fixup> visitor(this,
 | 
			
		||||
                                            slot_become_fixup(&become_map));
 | 
			
		||||
    workhorse.visit_all_roots();
 | 
			
		||||
    visitor.visit_all_roots();
 | 
			
		||||
 | 
			
		||||
    object_become_visitor object_visitor(&workhorse);
 | 
			
		||||
    object_become_visitor object_visitor(&visitor);
 | 
			
		||||
    each_object(object_visitor);
 | 
			
		||||
 | 
			
		||||
    code_block_become_visitor code_block_visitor(&workhorse);
 | 
			
		||||
    code_block_become_visitor code_block_visitor(&visitor);
 | 
			
		||||
    each_code_block(code_block_visitor);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue