/* Allocates memory (frames.add()) */
- void operator()(void* frame_top, cell frame_size, code_block* owner,
- void* addr) {
+ void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
data_root<object> executing_quot(owner->owner_quot(), parent);
data_root<object> executing(owner->owner, parent);
data_root<object> scan(owner->scan(parent, addr), parent);
void factor_vm::primitive_innermost_stack_frame_scan() {
callstack* stack = untag_check<callstack>(ctx->peek());
void* frame = stack->top();
- void* addr = *(void**)frame;
+ cell addr = *(cell*)frame;
ctx->replace(code->code_block_for_address((cell)addr)->scan(this, addr));
}
fixnum frame_offset = 0;
while (frame_offset < frame_length) {
- void* frame_top = stack->frame_top_at(frame_offset);
- void* addr = *(void**)frame_top;
+ cell frame_top = (cell)stack->frame_top_at(frame_offset);
+ cell addr = *(cell*)frame_top;
+ cell fixed_addr = Fixup::translated_code_block_map
+ ? (cell)fixup.translate_code((code_block*)addr)
+ : addr;
+ code_block* owner = code->code_block_for_address(fixed_addr);
- void* fixed_addr = Fixup::translated_code_block_map
- ? (void*)fixup.translate_code((code_block*)addr)
- : addr;
- code_block* owner = code->code_block_for_address((cell)fixed_addr);
- cell frame_size = owner->stack_frame_size_for_address((cell)fixed_addr);
+ cell frame_size = owner->stack_frame_size_for_address(fixed_addr);
iterator(frame_top, frame_size, owner, fixed_addr);
frame_offset += frame_size;
cell frame_top = ctx->callstack_top;
while (frame_top < ctx->callstack_bottom) {
- void* addr = *(void**)frame_top;
+ cell addr = *(cell*)frame_top;
FACTOR_ASSERT(addr != 0);
- void* fixed_addr = Fixup::translated_code_block_map
- ? (void*)fixup.translate_code((code_block*)addr)
- : addr;
+ cell fixed_addr = Fixup::translated_code_block_map
+ ? (cell)fixup.translate_code((code_block*)addr)
+ : addr;
- code_block* owner = code->code_block_for_address((cell)fixed_addr);
+ code_block* owner = code->code_block_for_address(fixed_addr);
code_block* fixed_owner =
Fixup::translated_code_block_map ? owner : fixup.translate_code(owner);
- cell frame_size =
- fixed_owner->stack_frame_size_for_address((cell)fixed_addr);
+ cell frame_size = fixed_owner->stack_frame_size_for_address(fixed_addr);
- void* fixed_addr_for_iter =
+ cell fixed_addr_for_iter =
Fixup::translated_code_block_map ? fixed_addr : addr;
- iterator((void*)frame_top, frame_size, owner, fixed_addr_for_iter);
+ iterator(frame_top, frame_size, owner, fixed_addr_for_iter);
frame_top += frame_size;
}
}
call_frame_code_block_visitor(factor_vm* parent, Fixup fixup)
: parent(parent), fixup(fixup) {}
- void operator()(void* frame_top, cell frame_size, code_block* owner,
- void* addr) {
+ void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
code_block* compiled =
Fixup::translated_code_block_map ? owner : fixup.fixup_code(owner);
- void* fixed_addr = compiled->address_for_offset(owner->offset(addr));
+ cell fixed_addr = compiled->address_for_offset(owner->offset((void*)addr));
- *(void**)frame_top = fixed_addr;
+ *(cell*)frame_top = fixed_addr;
}
};
/* If the code block is an unoptimized quotation, we can calculate the
scan offset. In all other cases -1 is returned. */
-cell code_block::scan(factor_vm* vm, void* addr) const {
+cell code_block::scan(factor_vm* vm, cell addr) const {
if (type() != code_block_unoptimized) {
return tag_fixnum(-1);
}
if (!obj.type_p(QUOTATION_TYPE))
return tag_fixnum(-1);
- cell ofs = offset(addr);
+ cell ofs = offset((void*)addr);
return tag_fixnum(vm->quot_code_offset_to_scan(obj.value(), ofs));
}
cell offset(void* addr) const { return (char*)addr - (char*)entry_point(); }
- void* address_for_offset(cell offset) const {
- return (void*)((char*)entry_point() + offset);
+ cell address_for_offset(cell offset) const {
+ return (cell)((char*)entry_point() + offset);
}
- cell scan(factor_vm* vm, void* addr) const;
+ cell scan(factor_vm* vm, cell addr) const;
cell owner_quot() const;
};
factor_vm* parent;
explicit stack_frame_printer(factor_vm* parent) : parent(parent) {}
- void operator()(void* frame_top, cell frame_size, code_block* owner,
- void* addr) {
+ void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
std::cout << std::endl;
- std::cout << "frame: " << frame_top << " size " << frame_size << std::endl;
+ std::cout << "frame: " << (void*)frame_top << " size " << size << std::endl;
std::cout << "executing: ";
parent->print_obj(owner->owner);
std::cout << std::endl;
std::cout << std::hex << (cell)owner->entry_point() << std::dec;
std::cout << std::endl;
std::cout << "return address: ";
- std::cout << std::hex << (cell)addr << std::dec;
+ std::cout << std::hex << addr << std::dec;
std::cout << std::endl;
}
};
bool prolog_p)
: sample_callstacks(sample_callstacks), skip_p(prolog_p) {}
- void operator()(void* frame_top, cell frame_size, code_block* owner,
- void* addr) {
+ void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
if (skip_p)
skip_p = false;
else
[entry_point]
[size]
*/
- void operator()(void* frame_top, cell frame_size, code_block* owner,
- void* addr) {
- cell return_address = owner->offset(addr);
+ void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
+ cell return_address = owner->offset((void*)addr);
code_block* compiled =
Fixup::translated_code_block_map ? owner