5 struct nursery_policy {
6 bump_allocator* nursery;
8 explicit nursery_policy(bump_allocator* nursery) : nursery(nursery) {}
10 bool should_copy_p(object* obj) {
11 return nursery->contains_p(obj);
14 void promoted_object(object* obj) {}
16 void visited_object(object* obj) {}
19 void factor_vm::collect_nursery() {
21 /* Copy live objects from the nursery (as determined by the root set and
22 marked cards in aging and tenured) to aging space. */
23 nursery_policy policy(this->data->nursery);
24 collector<aging_space, nursery_policy>
25 collector(this, this->data->aging, policy);
27 collector.visitor.visit_all_roots();
28 gc_event* event = current_gc->event;
31 event->started_card_scan();
32 collector.trace_cards(data->tenured, card_points_to_nursery,
33 card_points_to_nursery);
34 collector.trace_cards(data->aging, card_points_to_nursery, 0xff);
37 event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
40 event->started_code_scan();
41 collector.trace_code_heap_roots(&code->points_to_nursery);
43 event->ended_code_scan(code->points_to_nursery.size());
45 collector.cheneys_algorithm();
47 data->reset_nursery();
48 code->points_to_nursery.clear();