vm: clean up card unmarking

Slava Pestov 2009-10-30 03:15:50 -05:00
parent 8e0ce6aca7
commit a737a78110
5 changed files with 18 additions and 13 deletions

View File

@ -25,7 +25,7 @@ void factor_vm::collect_aging()
current_gc->event->started_code_scan();
collector.trace_cards(data->tenured,
card_points_to_aging,
simple_unmarker(card_mark_mask));
full_unmarker());
current_gc->event->ended_card_scan(collector.cards_scanned,collector.decks_scanned);
collector.tenure_reachable_objects();

View File

@ -71,6 +71,21 @@ inline static slot_visitor<collector_workhorse<TargetGeneration,Policy> > make_c
collector_workhorse<TargetGeneration,Policy>(parent,target,policy));
}
struct dummy_unmarker {
void operator()(card *ptr) {}
};
struct simple_unmarker {
card unmask;
explicit simple_unmarker(card unmask_) : unmask(unmask_) {}
void operator()(card *ptr) { *ptr &= ~unmask; }
};
struct full_unmarker {
explicit full_unmarker() {}
void operator()(card *ptr) { *ptr = 0; }
};
template<typename TargetGeneration, typename Policy> struct collector {
factor_vm *parent;
data_heap *data;

View File

@ -1,16 +1,6 @@
namespace factor
{
struct dummy_unmarker {
void operator()(card *ptr) {}
};
struct simple_unmarker {
card unmask;
explicit simple_unmarker(card unmask_) : unmask(unmask_) {}
void operator()(card *ptr) { *ptr &= ~unmask; }
};
template<typename TargetGeneration, typename Policy>
struct copying_collector : collector<TargetGeneration,Policy> {
cell scan;

View File

@ -24,7 +24,7 @@ void factor_vm::collect_nursery()
simple_unmarker(card_points_to_nursery));
collector.trace_cards(data->aging,
card_points_to_nursery,
simple_unmarker(card_mark_mask));
full_unmarker());
current_gc->event->ended_card_scan(collector.cards_scanned,collector.decks_scanned);
current_gc->event->started_code_scan();

View File

@ -33,7 +33,7 @@ void factor_vm::collect_to_tenured()
current_gc->event->started_card_scan();
collector.trace_cards(data->tenured,
card_points_to_aging,
simple_unmarker(card_mark_mask));
full_unmarker());
current_gc->event->ended_card_scan(collector.cards_scanned,collector.decks_scanned);
current_gc->event->started_code_scan();