5 struct nursery_policy {
8 explicit nursery_policy(factor_vm* parent) : parent(parent) {}
10 bool should_copy_p(object* obj) {
11 return parent->data->nursery->contains_p(obj);
14 void promoted_object(object* obj) {}
16 void visited_object(object* obj) {}
19 void factor_vm::collect_nursery() {
20 /* Copy live objects from the nursery (as determined by the root set and
21 marked cards in aging and tenured) to aging space. */
22 collector<aging_space, nursery_policy> collector(this,
24 nursery_policy(this));
26 collector.visitor.visit_all_roots();
27 gc_event* event = current_gc->event;
30 event->started_card_scan();
31 collector.trace_cards(data->tenured, card_points_to_nursery,
32 card_points_to_nursery);
33 collector.trace_cards(data->aging, card_points_to_nursery, 0xff);
36 event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
39 event->started_code_scan();
40 collector.trace_code_heap_roots(&code->points_to_nursery);
42 event->ended_code_scan(collector.code_blocks_scanned);
44 collector.cheneys_algorithm();
46 data->reset_nursery();
47 code->points_to_nursery.clear();