template <typename Fixup> void slot_visitor<Fixup>::visit_data_roots() { std::vector<data_root_range>::const_iterator iter = parent->data_roots.begin(); std::vector<data_root_range>::const_iterator end = parent->data_roots.end(); for (; iter < end; iter++) visit_object_array(iter->start, iter->start + iter->len); }
void slot_visitor<Fixup>::visit_slots(object* ptr, cell payload_start) { cell* slot = (cell*)ptr; cell* end = (cell*)((cell)ptr + payload_start); if (slot != end) { slot++; visit_object_array(slot, end); } }
template <typename Fixup> void slot_visitor<Fixup>::visit_contexts() { std::set<context*>::const_iterator begin = parent->active_contexts.begin(); std::set<context*>::const_iterator end = parent->active_contexts.end(); while (begin != end) { context* ctx = *begin; visit_stack_elements(ctx->datastack_seg, (cell*)ctx->datastack); visit_stack_elements(ctx->retainstack_seg, (cell*)ctx->retainstack); visit_object_array(ctx->context_objects, ctx->context_objects + context_object_count); visit_callstack(ctx); begin++; } }
void slot_visitor<Fixup>::visit_roots() { visit_handle(&parent->true_object); visit_handle(&parent->bignum_zero); visit_handle(&parent->bignum_pos_one); visit_handle(&parent->bignum_neg_one); visit_data_roots(); visit_bignum_roots(); visit_callback_roots(); visit_literal_table_roots(); visit_object_array(parent->special_objects,parent->special_objects + special_object_count); }
void slot_visitor<Fixup>::visit_stack_elements(segment* region, cell* top) { visit_object_array((cell*)region->start, top + 1); }