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;
|
code_heap* code;
|
||||||
TargetGeneration* target;
|
TargetGeneration* target;
|
||||||
gc_workhorse<TargetGeneration, Policy> workhorse;
|
gc_workhorse<TargetGeneration, Policy> workhorse;
|
||||||
slot_visitor<gc_workhorse<TargetGeneration, Policy> > data_visitor;
|
slot_visitor<gc_workhorse<TargetGeneration, Policy> > visitor;
|
||||||
cell cards_scanned;
|
cell cards_scanned;
|
||||||
cell decks_scanned;
|
cell decks_scanned;
|
||||||
cell code_blocks_scanned;
|
cell code_blocks_scanned;
|
||||||
|
@ -90,13 +90,13 @@ template <typename TargetGeneration, typename Policy> struct collector {
|
||||||
code(parent->code),
|
code(parent->code),
|
||||||
target(target),
|
target(target),
|
||||||
workhorse(parent, target, policy),
|
workhorse(parent, target, policy),
|
||||||
data_visitor(parent, workhorse),
|
visitor(parent, workhorse),
|
||||||
cards_scanned(0),
|
cards_scanned(0),
|
||||||
decks_scanned(0),
|
decks_scanned(0),
|
||||||
code_blocks_scanned(0) {}
|
code_blocks_scanned(0) {}
|
||||||
|
|
||||||
void trace_object(object* ptr) {
|
void trace_object(object* ptr) {
|
||||||
data_visitor.visit_slots(ptr);
|
visitor.visit_slots(ptr);
|
||||||
if (ptr->type() == ALIEN_TYPE)
|
if (ptr->type() == ALIEN_TYPE)
|
||||||
((alien*)ptr)->update_address();
|
((alien*)ptr)->update_address();
|
||||||
}
|
}
|
||||||
|
@ -107,8 +107,8 @@ template <typename TargetGeneration, typename Policy> struct collector {
|
||||||
|
|
||||||
for (; iter != end; iter++) {
|
for (; iter != end; iter++) {
|
||||||
code_block* compiled = *iter;
|
code_block* compiled = *iter;
|
||||||
data_visitor.visit_code_block_objects(compiled);
|
visitor.visit_code_block_objects(compiled);
|
||||||
data_visitor.visit_embedded_literals(compiled);
|
visitor.visit_embedded_literals(compiled);
|
||||||
compiled->flush_icache();
|
compiled->flush_icache();
|
||||||
code_blocks_scanned++;
|
code_blocks_scanned++;
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ template <typename TargetGeneration, typename Policy> struct collector {
|
||||||
cell* end_ptr = (cell*)end;
|
cell* end_ptr = (cell*)end;
|
||||||
|
|
||||||
for (; slot_ptr < end_ptr; slot_ptr++)
|
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 {
|
struct startup_code_block_relocation_visitor {
|
||||||
factor_vm* parent;
|
factor_vm* parent;
|
||||||
startup_fixup fixup;
|
startup_fixup fixup;
|
||||||
slot_visitor<startup_fixup> data_visitor;
|
slot_visitor<startup_fixup> visitor;
|
||||||
|
|
||||||
startup_code_block_relocation_visitor(factor_vm* parent,
|
startup_code_block_relocation_visitor(factor_vm* parent,
|
||||||
startup_fixup fixup)
|
startup_fixup fixup)
|
||||||
: parent(parent),
|
: parent(parent),
|
||||||
fixup(fixup),
|
fixup(fixup),
|
||||||
data_visitor(slot_visitor<startup_fixup>(parent, fixup)) {}
|
visitor(slot_visitor<startup_fixup>(parent, fixup)) {}
|
||||||
|
|
||||||
void operator()(instruction_operand op) {
|
void operator()(instruction_operand op) {
|
||||||
code_block* compiled = op.compiled;
|
code_block* compiled = op.compiled;
|
||||||
|
@ -177,8 +177,8 @@ struct startup_code_block_updater {
|
||||||
: parent(parent), fixup(fixup) {}
|
: parent(parent), fixup(fixup) {}
|
||||||
|
|
||||||
void operator()(code_block* compiled, cell size) {
|
void operator()(code_block* compiled, cell size) {
|
||||||
slot_visitor<startup_fixup> data_visitor(parent, fixup);
|
slot_visitor<startup_fixup> visitor(parent, fixup);
|
||||||
data_visitor.visit_code_block_objects(compiled);
|
visitor.visit_code_block_objects(compiled);
|
||||||
|
|
||||||
startup_code_block_relocation_visitor code_visitor(parent, fixup);
|
startup_code_block_relocation_visitor code_visitor(parent, fixup);
|
||||||
compiled->each_instruction_operand(code_visitor);
|
compiled->each_instruction_operand(code_visitor);
|
||||||
|
|
|
@ -88,24 +88,23 @@ struct slot_become_fixup : no_fixup {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct object_become_visitor {
|
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)
|
explicit object_become_visitor(slot_visitor<slot_become_fixup>* visitor)
|
||||||
: workhorse(workhorse) {}
|
: visitor(visitor) {}
|
||||||
|
|
||||||
void operator()(object* obj) { workhorse->visit_slots(obj); }
|
void operator()(object* obj) { visitor->visit_slots(obj); }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct code_block_become_visitor {
|
struct code_block_become_visitor {
|
||||||
slot_visitor<slot_become_fixup>* workhorse;
|
slot_visitor<slot_become_fixup>* visitor;
|
||||||
|
|
||||||
explicit code_block_become_visitor(
|
explicit code_block_become_visitor(
|
||||||
slot_visitor<slot_become_fixup>* workhorse)
|
slot_visitor<slot_become_fixup>* visitor) : visitor(visitor) {}
|
||||||
: workhorse(workhorse) {}
|
|
||||||
|
|
||||||
void operator()(code_block* compiled, cell size) {
|
void operator()(code_block* compiled, cell size) {
|
||||||
workhorse->visit_code_block_objects(compiled);
|
visitor->visit_code_block_objects(compiled);
|
||||||
workhorse->visit_embedded_literals(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 */
|
/* 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));
|
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);
|
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);
|
each_code_block(code_block_visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue