namespace factor {
code_heap::code_heap(cell size) {
- if (size > ((uint64_t)1 << (sizeof(cell) * 8 - 6)))
+ if (size > ((uint64_t)1 << (sizeof(cell) * 8 - 5)))
fatal_error("Heap too large", size);
seg = new segment(align_page(size), true);
if (!seg)
void code_heap::verify_all_blocks_set() {
auto all_blocks_set_verifier = [&](code_block* block, cell size) {
+ (void)block;
+ (void)size;
FACTOR_ASSERT(all_blocks.find((cell)block) != all_blocks.end());
};
- allocator->iterate(all_blocks_set_verifier);
+ allocator->iterate(all_blocks_set_verifier, no_fixup());
}
code_block* code_heap::code_block_for_address(cell address) {
void code_heap::initialize_all_blocks_set() {
all_blocks.clear();
auto all_blocks_set_inserter = [&](code_block* block, cell size) {
+ (void)size;
all_blocks.insert((cell)block);
};
- allocator->iterate(all_blocks_set_inserter);
+ allocator->iterate(all_blocks_set_inserter, no_fixup());
#ifdef FACTOR_DEBUG
verify_all_blocks_set();
#endif
// If generic words were redefined, inline caches need to be reset.
void factor_vm::update_code_heap_words(bool reset_inline_caches) {
auto word_updater = [&](code_block* block, cell size) {
+ (void)size;
update_word_references(block, reset_inline_caches);
};
each_code_block(word_updater);
cell frame_size = untag_fixnum(array_nth(compiled_data, 5));
code_block* compiled =
- add_code_block(code_block_optimized, code, labels, word.value(),
+ add_code_block(CODE_BLOCK_OPTIMIZED, code, labels, word.value(),
relocation, parameters, literals, frame_size);
word->entry_point = compiled->entry_point();
void factor_vm::primitive_strip_stack_traces() {
auto stack_trace_stripper = [](code_block* block, cell size) {
+ (void)size;
block->owner = false_object;
};
each_code_block(stack_trace_stripper);
void factor_vm::primitive_code_blocks() {
std::vector<cell> objects;
auto code_block_accumulator = [&](code_block* block, cell size) {
+ (void)size;
objects.push_back(block->owner);
objects.push_back(block->parameters);
objects.push_back(block->relocation);