VM: object_compaction_updater -> lambda func
parent
9049aa1f65
commit
18ab09e493
|
@ -85,24 +85,6 @@ struct code_compaction_fixup {
|
|||
}
|
||||
};
|
||||
|
||||
struct object_compaction_updater {
|
||||
factor_vm* parent;
|
||||
compaction_fixup fixup;
|
||||
object_start_map* starts;
|
||||
|
||||
object_compaction_updater(factor_vm* parent, compaction_fixup fixup)
|
||||
: parent(parent),
|
||||
fixup(fixup),
|
||||
starts(&parent->data->tenured->starts) {}
|
||||
|
||||
void operator()(object* old_address, object* new_address, cell size) {
|
||||
slot_visitor<compaction_fixup> forwarder(parent, fixup);
|
||||
forwarder.visit_slots(new_address);
|
||||
forwarder.visit_object_code_block(new_address);
|
||||
starts->record_object_start_offset(new_address);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Fixup>
|
||||
void update_relocation(factor_vm* parent,
|
||||
cell old_entry_point,
|
||||
|
@ -220,10 +202,12 @@ void factor_vm::collect_compact_impl() {
|
|||
|
||||
/* Slide everything in tenured space up, and update data and code heap
|
||||
pointers inside objects. */
|
||||
{
|
||||
object_compaction_updater object_updater(this, fixup);
|
||||
tenured->compact(object_updater, fixup, &data_finger);
|
||||
}
|
||||
auto compact_object_func = [&](object* old_addr, object* new_addr, cell size) {
|
||||
forwarder.visit_slots(new_addr);
|
||||
forwarder.visit_object_code_block(new_addr);
|
||||
tenured->starts.record_object_start_offset(new_addr);
|
||||
};
|
||||
tenured->compact(compact_object_func, fixup, &data_finger);
|
||||
|
||||
/* Slide everything in the code heap up, and update data and code heap
|
||||
pointers inside code blocks. */
|
||||
|
|
Loading…
Reference in New Issue