diff --git a/vm/aging_collector.cpp b/vm/aging_collector.cpp index 8c6e4ae837..92b7f1fffb 100644 --- a/vm/aging_collector.cpp +++ b/vm/aging_collector.cpp @@ -16,7 +16,7 @@ void factor_vm::collect_aging() { if (event) event->started_card_scan(); - collector.trace_cards(data->tenured, card_points_to_aging, full_unmarker()); + collector.trace_cards(data->tenured, card_points_to_aging, 0xff); if (event) event->ended_card_scan(collector.cards_scanned, collector.decks_scanned); diff --git a/vm/collector.hpp b/vm/collector.hpp index 7e3e57a599..8a1cc86853 100644 --- a/vm/collector.hpp +++ b/vm/collector.hpp @@ -58,21 +58,6 @@ struct gc_workhorse : no_fixup { } }; -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 { - full_unmarker() {} - void operator()(card* ptr) { *ptr = 0; } -}; - template struct collector { factor_vm* parent; data_heap* data; @@ -152,8 +137,8 @@ template struct collector { } } - template - void trace_cards(SourceGeneration* gen, card mask, Unmarker unmarker) { + template + void trace_cards(SourceGeneration* gen, card mask, card unmask) { card_deck* decks = data->decks; card_deck* cards = data->cards; @@ -162,7 +147,9 @@ template struct collector { cell first_deck = card_deck_for_address(gen->start); cell last_deck = card_deck_for_address(gen->end); - cell start = 0, binary_start = 0, end = 0; + cell start = 0; + cell binary_start = 0; + cell end = 0; for (cell deck_index = first_deck; deck_index < last_deck; deck_index++) { if (decks[deck_index] & mask) { @@ -199,14 +186,14 @@ template struct collector { } } - unmarker(&cards[card_index]); + cards[card_index] &= ~unmask; if (!start) return; } } - unmarker(&decks[deck_index]); + decks[deck_index] &= ~unmask; } } } diff --git a/vm/nursery_collector.cpp b/vm/nursery_collector.cpp index c902ebbeae..72c7df0eab 100644 --- a/vm/nursery_collector.cpp +++ b/vm/nursery_collector.cpp @@ -15,8 +15,8 @@ void factor_vm::collect_nursery() { if (event) event->started_card_scan(); collector.trace_cards(data->tenured, card_points_to_nursery, - simple_unmarker(card_points_to_nursery)); - collector.trace_cards(data->aging, card_points_to_nursery, full_unmarker()); + card_points_to_nursery); + collector.trace_cards(data->aging, card_points_to_nursery, 0xff); if (event) event->ended_card_scan(collector.cards_scanned, collector.decks_scanned); diff --git a/vm/to_tenured_collector.cpp b/vm/to_tenured_collector.cpp index 4288329281..3a8fd52ddb 100644 --- a/vm/to_tenured_collector.cpp +++ b/vm/to_tenured_collector.cpp @@ -18,7 +18,7 @@ void factor_vm::collect_to_tenured() { if (event) event->started_card_scan(); - collector.trace_cards(data->tenured, card_points_to_aging, full_unmarker()); + collector.trace_cards(data->tenured, card_points_to_aging, 0xff); if (event) event->ended_card_scan(collector.cards_scanned, collector.decks_scanned);