VM: move trace_partial_objects to visit_partial_objects since it is a

kind of visitation function
db4
Björn Lindqvist 2015-08-14 05:49:20 +02:00 committed by John Benediktsson
parent df669298ce
commit e14d820138
2 changed files with 15 additions and 11 deletions

View File

@ -94,16 +94,6 @@ template <typename TargetGeneration, typename Policy> struct collector {
} }
} }
void trace_partial_objects(cell start, cell card_start, cell card_end) {
cell *scan_start = (cell*)start + 1;
cell *scan_end = scan_start + ((object*)start)->slot_count();
scan_start = std::max(scan_start, (cell*)card_start);
scan_end = std::min(scan_end, (cell*)card_end);
visitor.visit_object_array(scan_start, scan_end);
}
template <typename SourceGeneration> template <typename SourceGeneration>
cell trace_card(SourceGeneration* gen, cell index, cell start) { cell trace_card(SourceGeneration* gen, cell index, cell start) {
@ -119,7 +109,7 @@ template <typename TargetGeneration, typename Policy> struct collector {
} }
while (start && start < end_addr) { while (start && start < end_addr) {
trace_partial_objects(start, start_addr, end_addr); visitor.visit_partial_objects(start, start_addr, end_addr);
if ((start + ((object*)start)->size()) >= end_addr) { if ((start + ((object*)start)->size()) >= end_addr) {
/* The object can overlap the card boundary, then the /* The object can overlap the card boundary, then the
remainder of it will be handled in the next card remainder of it will be handled in the next card

View File

@ -127,6 +127,7 @@ template <typename Fixup> struct slot_visitor {
cell visit_pointer(cell pointer); cell visit_pointer(cell pointer);
void visit_handle(cell* handle); void visit_handle(cell* handle);
void visit_object_array(cell* start, cell* end); void visit_object_array(cell* start, cell* end);
void visit_partial_objects(cell start, cell card_start, cell card_end);
void visit_slots(object* ptr); void visit_slots(object* ptr);
void visit_stack_elements(segment* region, cell* top); void visit_stack_elements(segment* region, cell* top);
void visit_all_roots(); void visit_all_roots();
@ -163,6 +164,19 @@ void slot_visitor<Fixup>::visit_object_array(cell* start, cell* end) {
visit_handle(start++); visit_handle(start++);
} }
template <typename Fixup>
void slot_visitor<Fixup>::visit_partial_objects(cell start,
cell card_start,
cell card_end) {
cell *scan_start = (cell*)start + 1;
cell *scan_end = scan_start + ((object*)start)->slot_count();
scan_start = std::max(scan_start, (cell*)card_start);
scan_end = std::min(scan_end, (cell*)card_end);
visit_object_array(scan_start, scan_end);
}
template <typename Fixup> void slot_visitor<Fixup>::visit_slots(object* obj) { template <typename Fixup> void slot_visitor<Fixup>::visit_slots(object* obj) {
if (obj->type() == CALLSTACK_TYPE) if (obj->type() == CALLSTACK_TYPE)
visit_callstack_object((callstack*)obj); visit_callstack_object((callstack*)obj);