void code_block_visitor<Visitor>::visit_object_code_block(object *obj) { switch(obj->type()) { case WORD_TYPE: { word *w = (word *)obj; if(w->code) w->code = visitor(w->code); if(w->profiling) w->profiling = visitor(w->profiling); parent->update_word_entry_point(w); break; } case QUOTATION_TYPE: { quotation *q = (quotation *)obj; if(q->code) parent->set_quot_entry_point(q,visitor(q->code)); break; } case CALLSTACK_TYPE: { callstack *stack = (callstack *)obj; call_frame_code_block_visitor<Visitor> call_frame_visitor(parent,visitor); parent->iterate_callstack_object(stack,call_frame_visitor); break; } } }
void slot_visitor<Fixup>::visit_callstack(context* ctx) { call_frame_slot_visitor<Fixup> call_frame_visitor(parent, this); parent->iterate_callstack(ctx, call_frame_visitor, fixup); }
void code_block_visitor<Visitor>::visit_context_code_blocks() { call_frame_code_block_visitor<Visitor> call_frame_visitor(parent,visitor); parent->iterate_active_callstacks(call_frame_visitor); }
void slot_visitor<Fixup>::visit_callstack_object(callstack* stack) { call_frame_slot_visitor<Fixup> call_frame_visitor(parent, this); parent->iterate_callstack_object(stack, call_frame_visitor, fixup); }