]> gitweb.factorcode.org Git - factor.git/blob - vm/to_tenured_collector.cpp
VM: new function visit_mark_stack() to factor out the mark stack iteration
[factor.git] / vm / to_tenured_collector.cpp
1 #include "master.hpp"
2
3 namespace factor {
4
5 to_tenured_collector::to_tenured_collector(factor_vm* parent)
6     : collector<tenured_space, to_tenured_policy>(parent,
7                                                   parent->data->tenured,
8                                                   to_tenured_policy(parent)) {}
9
10 void factor_vm::collect_to_tenured() {
11   /* Copy live objects from aging space to tenured space. */
12   to_tenured_collector collector(this);
13
14   mark_stack.clear();
15
16   collector.visitor.visit_all_roots();
17   gc_event* event = current_gc->event;
18
19   if (event)
20     event->started_card_scan();
21   collector.trace_cards(data->tenured, card_points_to_aging, full_unmarker());
22   if (event)
23     event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);
24
25   if (event)
26     event->started_code_scan();
27   collector.trace_code_heap_roots(&code->points_to_aging);
28   if (event)
29     event->ended_code_scan(collector.code_blocks_scanned);
30
31   collector.visitor.visit_mark_stack(&mark_stack);
32
33   data->reset_nursery();
34   data->reset_aging();
35   code->clear_remembered_set();
36 }
37
38 }