Get modify-code-heap working if stack traces are stripped (but then it won't update existing code blocks), and rename code_heap::code_heap_free() to code_heap::free()

db4
Slava Pestov 2009-12-02 05:27:48 -06:00
parent eb840dcf41
commit 066d2836ca
4 changed files with 11 additions and 13 deletions

View File

@ -62,12 +62,7 @@ cell factor_vm::code_block_owner(code_block *compiled)
return word_wrapper->object;
}
else
{
#ifdef FACTOR_DEBUG
assert(owner.type_p(WORD_TYPE));
#endif
return compiled->owner;
}
}
struct update_word_references_relocation_visitor {
@ -82,19 +77,22 @@ struct update_word_references_relocation_visitor {
case RT_XT:
{
code_block *compiled = op.load_code_block();
op.store_value(parent->compute_xt_address(compiled->owner));
cell owner = compiled->owner;
if(to_boolean(owner)) op.store_value(parent->compute_xt_address(owner));
break;
}
case RT_XT_PIC:
{
code_block *compiled = op.load_code_block();
op.store_value(parent->compute_xt_pic_address(parent->code_block_owner(compiled)));
cell owner = parent->code_block_owner(compiled);
if(to_boolean(owner)) op.store_value(parent->compute_xt_pic_address(owner));
break;
}
case RT_XT_PIC_TAIL:
{
code_block *compiled = op.load_code_block();
op.store_value(parent->compute_xt_pic_tail_address(parent->code_block_owner(compiled)));
cell owner = parent->code_block_owner(compiled);
if(to_boolean(owner)) op.store_value(parent->compute_xt_pic_tail_address(owner));
break;
}
default:
@ -119,7 +117,7 @@ void factor_vm::update_word_references(code_block *compiled)
the code heap with dead PICs that will be freed on the next
GC, we add them to the free list immediately. */
else if(compiled->pic_p())
code->code_heap_free(compiled);
code->free(compiled);
else
{
update_word_references_relocation_visitor visitor(this);

View File

@ -51,11 +51,11 @@ void code_heap::clear_mark_bits()
allocator->state.clear_mark_bits();
}
void code_heap::code_heap_free(code_block *compiled)
void code_heap::free(code_block *compiled)
{
assert(!uninitialized_p(compiled));
points_to_nursery.erase(compiled);
points_to_aging.erase(compiled);
uninitialized_blocks.erase(compiled);
allocator->free(compiled);
}

View File

@ -27,7 +27,7 @@ struct code_heap {
bool marked_p(code_block *compiled);
void set_marked_p(code_block *compiled);
void clear_mark_bits();
void code_heap_free(code_block *compiled);
void free(code_block *compiled);
void flush_icache();
};

View File

@ -18,7 +18,7 @@ void factor_vm::deallocate_inline_cache(cell return_address)
/* Free the old PIC since we know its unreachable */
if(old_block->pic_p())
code->code_heap_free(old_block);
code->free(old_block);
}
/* Figure out what kind of type check the PIC needs based on the methods