Esempio n. 1
0
void code_heap::sweep() {
  clear_free_blocks_from_all_blocks_iterator clearer(this);
  allocator->sweep(clearer);
#ifdef FACTOR_DEBUG
  verify_all_blocks_set();
#endif
}
Esempio n. 2
0
void code_heap::initialize_all_blocks_set() {
  all_blocks.clear();
  all_blocks_set_inserter inserter(this);
  allocator->iterate(inserter);
#ifdef FACTOR_DEBUG
  verify_all_blocks_set();
#endif
}
Esempio n. 3
0
/* Recomputes the all_blocks set of code blocks */
void code_heap::initialize_all_blocks_set() {
  all_blocks.clear();
  auto all_blocks_set_inserter = [&](code_block* block, cell size) {
    all_blocks.insert((cell)block);
  };
  allocator->iterate(all_blocks_set_inserter);
#ifdef FACTOR_DEBUG
  verify_all_blocks_set();
#endif
}
Esempio n. 4
0
void code_heap::sweep() {
  auto clear_free_blocks_from_all_blocks = [&](code_block* block, cell size) {
    std::set<cell>::iterator erase_from =
      all_blocks.lower_bound((cell)block);
    std::set<cell>::iterator erase_to =
      all_blocks.lower_bound((cell)block + size);
    all_blocks.erase(erase_from, erase_to);
  };
  allocator->sweep(clear_free_blocks_from_all_blocks);
#ifdef FACTOR_DEBUG
  verify_all_blocks_set();
#endif
}